0

さて、スタックに単語を入力しようとしています。文字列を入力した後、それらすべてを出力したいと思います。そのため、一度に1つずつしか印刷できません。外でforループを使用してみましたが、スタックは明らかに反復可能ではありません。だから私はスタック内でそれを繰り返します。それはまだ機能していません。

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

1 に答える 1

0

Stackクラスにmethodを指定__len__すると、スタックが空かどうかのテストが容易になります。

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()(引数なしで)リストの最後から削除することに注意してください。

クラスを反復可能なタイプにするには、少なくとも__iter__メソッドを追加する必要があります。オプションで.__next__()メソッドと一緒に追加する必要があります。

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
于 2013-02-04T20:29:40.267 に答える