我希望能夠驗證括號,以便它們包圍並忽略任何類型的字符。只要有效地使用括號括起來的字符串,那麼其他的錯誤就是True
。pop()邏輯中的空deque()
我還是新來的python,所以我不知道如何正確地創建一個if語句爲這個特定的條件。我想創建一個網絡聲明,這樣當我.pop()
空deque()
我就能return False
,而不是收到錯誤消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop from an empty deque
也許周圍有解決這個問題的另一種更好的方法。如果是的話我會很高興地看到別人會解決它
例如:
a = 'sdf(sadf(sdf)sdf)sdfsd0sdf)sdf(sdf0)' # false
b = 'dsf))))(((((dsfsdf' # false
c = '()()()()' # true
d = '((((asd(asd)asd)()()asd))' # true
我的代碼:
# any letter is ignored
# jsut make sure that the parenthesis are equal
from collections import *
def str_valid(stringy):
param_stack = deque()
for n in stringy:
if n ==')':
param_stack.pop()
if n == '(':
param_stack.append('(')
if param_stack == []:
return True
else:
return False
a = 'sdf(sadf(sdf)sdf)sdfsd0sdf)sdf(sdf0)' # false
b = 'dsf))))(((((dsfsdf' # false
c = '()()()()' # true
d = '((((asd(asd)asd)()()asd))' # true
print str_valid(a)
print str_valid(b)
print str_valid(c)
print str_valid(d)
爲什麼當一個簡單的整數計數器可以做到這一點時,爲什麼使用'deque'呢?從0開始,在看到'(',減少,當看到'''''時遞減',然後'不返回paren_count')。 – kindall
,因爲如果你在開頭看到一個'')'''',因爲''''開始的外殼將不起作用。 – Liondancer
是的,很抱歉,只要你低於零就需要失敗。但是,當你真正感興趣的是它的長度時,你仍然不需要容器。這就像在牆上寫100個標記一樣數到100。 – kindall