我编写了这个程序,以相反的顺序打印列表中的元素。它给了我正确答案,但它在答案后显示另一个错误。 我的代码出了什么问题?
Stack Class
class Stack:
def __init__(self):
self.items=[]
def isEmpty(self):
return self.items==[]
def push(self,data):
self.items.append(data)
def size(self):
return len(Self.items)
def show(self):
print (self.items)
def peek(self):
return self.items[len(self.items)-1]
def pop(self):
assert not self.isEmpty()
return self.items.pop()
程序
def reverseOrder():
lista = [1,4,6,7,8,9]
s = Stack()
for i in lista:
s.push(i)
while s.isEmpty:
print(s.pop())
reverseOrder()
以下是我的输出:
>>>
RESTART: C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py
9
8
7
6
4
1
Traceback (most recent call last):
File "C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py", line 35, in <module>
reverseOrder();
File "C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py", line 33, in reverseOrder
print(s.pop());
File "C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py", line 21, in pop
assert not self.isEmpty()
AssertionError
>>>
答案 0 :(得分:2)
while s.isEmpty():
print(s.pop())
这应该是
while not s.isEmpty():
print(s.pop())
在堆栈不为空时从堆栈中删除它们。
答案 1 :(得分:1)
嗯,一切都像你写的一样有效:-)。 assert
命令就像它所说的那样,它声明了一些条件。如果满足条件,一切都很好。如果不是,则会引发错误。您需要的不是assert
而是:
def pop(self):
if not self.isEmpty():
return self.items.pop()
但是,既然你已经在while
循环中检查了列表是否为空,那么你应该把它留下来,所以应该是这样的:
def pop(self):
return self.items.pop()
正如其他人所建议的那样,而不是
while s.isEmpty():
你应该使用
while not s.isEmpty():