使用s以相反顺序写入列表时出错

2024-09-29 17:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

堆栈类

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

Tags: inselfreturnlocaldefitemspopusers
2条回答
while s.isEmpty():
    print(s.pop())

这应该是

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

当堆栈不为空时从堆栈中移除元素。你知道吗

好吧,一切都和你写的一样:-)。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(): 

相关问题 更多 >

    热门问题