2017-09-15 54 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