2017-09-15 70 views
-1

我编写了此程序以相反顺序在列表中打印元素。它给了我正确的答案,但答案后显示了另一个错误。 我的代码有什么问题?使用堆栈以相反顺序写入列表时出错

Stack类

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 
>>> 
+2

'while s.isEmpty' must be'while not s.isEmpty()'。调用你的功能!并且不要使用分号。 – DyZ

+0

不,那么它根本没有给我输出..在那里我正在检查一个条件。所以它应该s.isEmpty只有我认为 – dilk

回答

1

那么,一切都像你写的那样工作:-)。命令按其名称所做,它声称有一些条件。如果条件满足,一切都很好。如果不是,则会产生错误。你所需要的,而不是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(): 
+0

还是不给我输出 – dilk

+0

请检查一行:'while s.isEmpty:'。您应该添加括号以调用函数。 – Fejs

+0

是的,正确..非常感谢 – dilk

2
while s.isEmpty(): 
    print(s.pop()) 

这应该是

while not s.isEmpty(): 
    print(s.pop()) 

当堆栈中的元素不为空时,从元素中移除元素。

+1

它应该是'不s.isEmpty()'。 – DyZ

+0

是的。谢谢! –

+0

它仍然不会给我输出.. – dilk