我希望能够验证括号,以便它们包含并忽略任何类型的字符。只要有效地使用带括号的字符串包围,那么 True 否则为 `False。
我还是 python 的新手,所以我不确定如何为这个特定条件正确创建 if 语句。我正在尝试创建一个 fi 语句,这样当我 .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)
请您参考如下方法:
如果你只是想要一个 if 语句来检查 deque 在 pop() 之前是否为空,你可以使用
if n ==')':
if param_stack:
param_stack.pop()
else:
return false
...
if param_stack 会将其隐式转换为 bool 值,如果它包含一些元素则返回 true,否则返回 false。
