【发布时间】:2018-05-05 12:35:48
【问题描述】:
def spc(sym):
stk1=myStack()
stkall=myStack()
for i in sym:
if i not in stk1:
stk1.push(i)
else:
stkall.push(i)
for j in stk1:
for k in stkall:
if j==k:
stk1.pop(j)
stkall.pop(k)
else:
pass
if len(stk1) == len(stkall):
print("all symbols match")
else:
print(("these symbols, %s, have no matches")%(stkall))
上面的代码给了我这个错误
“TypeError:'myStack' 类型的参数不可迭代”
但我通过@SergeBallesta 的回答修复了它。在我将代码编辑为您现在看到的样子之后。
现在我得到这个错误:
"return self.container.pop(item) # 从容器中弹出,这是从旧版本修复的错误 TypeError: 'str' 对象不能被解释为整数"
我想要实现的是括号和所有符号的适当平衡,因为不仅每个开始符号都有一个对应的结束符号,而且符号的类型也匹配。
我的 Stack 类的代码如下。请协助使用 STACKS 实现此功能
class myStack:
def __init__(self):
self.container = []
def isEmpty(self):
return self.size() == 0
def push(self, item):
self.container.append(item
def pop(self, item):
return self.container.pop(item)
def size(self):
return len(self.container) # length of the container
def __iter__(self):
return iter(self.container)
【问题讨论】:
-
您需要定义
myStack.__iter__以使您的堆栈可迭代 -
list.pop接受一个可选的索引来弹出。该索引必须是整数。您正在尝试通过引用弹出项目。我怀疑您的sym是整数的可迭代对象。 -
@PatrickHaugh 我用一串符号调用了该函数。符号不是整数。 spc('}{))[]({{}[][][]})})')
标签: python python-3.x stack string-matching