我希望能够验证圆括号,这样它们就可以包含并忽略任何类型的字符。只要有效地使用了带括号的字符串的enclosure,那么True
else`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
也许还有其他更好的方法来解决这个问题。如果是这样的话,我很高兴看到别人会怎么解决这个问题
例如:
^{pr2}$我的代码:
# 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)
需要注意的是:首先,您使用的}。所以使用普通的Python列表更自然。除非你需要把东西放上去,或者把东西取下来,“左端”,否则deque没有比单子更有效的了。在
deque
的方法只有append()
和{其次,你已经知道如何测试一个空的deque!你在这里做的:
这有点奇怪,因为你在比较一个deque和一个列表,但是它是有效的。再加上一点经验,你可以这样写:
^{pr2}$如果经验丰富,您可以使用:
(空容器在truth-y上下文中通常表现为False)。在
但是不管你怎么写,与其引入
try/except
块,它更容易、更清晰地执行以下操作:明白了吗?在
如果只希望If语句在pop()之前检查deque是否为空,则可以使用
如果param_stack将隐式地将其转换为布尔值,如果包含某些元素,则返回true,否则返回false。在
如果您只想弹出一个没有问题的空deque:
只是一个警告,以防您不知道:请将try/except/else/finally中的代码量保持尽可能简短和集中。很容易在错误处理程序中突然出现错误并导致意外。在
如果这不是您需要的,请澄清您的代码中有哪些不起作用。在
相关问题 更多 >
编程相关推荐