Python 使用堆栈以相反顺序写入列表时出错

Python 使用堆栈以相反顺序写入列表时出错,python,stack,Python,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(S

我写这个程序是为了以相反的顺序打印列表中的元素。它给了我正确的答案,但它显示了答案后的另一个错误。 我的代码怎么了

堆栈类

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
>>> 
>
重新启动:C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py
9
8.
7.
6.
4.
1.
回溯(最近一次呼叫最后一次):
文件“C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py”,第35行,在
反向顺序();
文件“C:/Users/Dil/AppData/Local/Programs/Python36-32/Tutorials/reverseOrder.py”,第33行,反向排序
印刷品(s.pop());
文件“C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/reverseOrder.py”,第21行,pop格式
断言非自我。isEmpty()
断言错误
>>> 
这应该是

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

在堆栈不为空时从堆栈中删除元素。

好吧,一切都按您编写的那样工作:-)<代码>断言命令按照它的名称执行,它断言某些条件。如果条件满足,一切都好。如果不是,则会引发错误。您需要的不是断言,而是:

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(): 

而s.isEmpty
必须是
而不是s.isEmpty()
。调用你的函数!不要用分号。不,那么它根本就不会给我输出。。我在检查一个情况。因此,它应该是s.isEmpty,正如我认为它应该是
而不是s.isEmpty()
。是的,逻辑是正确的。。但我的程序至少告诉我答案。但当我写“不,我是空的”时,它并没有给我任何答案……对我来说很有用。您是否在
isEmpty
之后添加了括号?它仍然没有给出输出请检查行:
,而s.isEmpty:
。为了调用函数,应该添加括号。
while not s.isEmpty():