2013-02-04 35 views
0

好吧,所以即時嘗試在堆棧中輸入一個單詞,我想輸入一個字符串後打印所有這些。所以我一次只能打印一份。我嘗試在外面使用for循環,但Stacks顯然不可迭代。所以我在堆棧中迭代它。它仍然沒有工作。棧迭代python3

class Stack: 

    def __init__(self): 
     self.items = [] 
    def push(self,items): 
     self.items.insert(0,items) 
    def pop(self): 
     for x in self.items: 
      print(self.items.pop(0)) 

    def show(self): 
     print (self.items) 

s = Stack() 
s.show() 
placed = input("enter") 

item = s.pop() 
print(item, "is on top", s) 
+0

關於你的棧的設計,爲什麼不使用'.append()'和'。流行()'而不是?將項目添加到列表的末尾,並且不帶參數的'.pop()'從末尾再次移除它們。 –

回答

0

給你Stack__len__ method,這將使測試,如果堆棧是空的容易:

class Stack: 
    def __init__(self): 
     self.items = [] 

    def push(self,item): 
     self.items.append(item) 

    def pop(self): 
     return self.items.pop() 

    def show(self): 
     print (self.items) 

    def __len__(self): 
     return len(self.items) 

stack = Stack() 

stack.push('World!') 
stack.push('Hello') 

while stack: # tests the length through __len__ 
    print(stack.pop()) 

請注意,我只是.append().items列表的末尾,再後來就.pop()(沒有參數),從列表的末尾移除。

爲了使您的an iterable type類,你需要用.__next__() method添加至少一個__iter__ method,可以一起:

class Stack: 
    # rest elided 

    def __iter__(self): 
     return self 

    def next(self): 
     try: 
      return self.items.pop() 
     except IndexError: # empty 
      raise StopIteration # signal iterator is done 
+0

非常感謝! –

+0

好的等待如何向後打印Hello?這就是爲什麼我需要迭代? –

+0

好吧,我明白了,你只需要這個。 return self .__ items [len(self .__ items)-1] –