

Python初心者です。以下に示したコードに関して、いくつか質問があります。

  * `reverse = reverse + stack.pop()` に問題があるようで、以下のエラーが出ます。
[code]     TypeError: can only concatenate str (not "NoneType") to str

    
[/code]

  * なぜ `while stack.size():` で `stack.size()` を使うのでしょうか。  
これは "Hello" の文字数分（5回）繰り返すという意味でしょうか。  
また、`stack.size()` の中身がなくなるまでという意味でしょうか。

* * *

**対象のコード:**

[code]

    class Stack:
        def __init__(self):
            self.items = []
        def push(self, item):
            self.items.append(item)
        def pop(self):
            self.items.pop()
        def size(self):
            return len(self.items)
    
    stack = Stack()
    
    for c in "Hello":
        stack.push(c)
    
    reverse = ""
    
    while stack.size():
        reverse = reverse + stack.pop()
    
    print(reverse)
    
[/code]


CC BY-SA 4.0
2020-07-30T13:08:56.637
69125
2021-12-28T13:03:10.280
2020-07-30T16:53:10.573
3060
41321
question
python
stackを使い文字列を逆にする方法で TypeError: can only concatenate str (not "NoneType") to str エラーになる


1つ目の回答は`def pop(self):`のreturnが抜けています。  
下記の修正で意図通りに動くと予想されます。

修正前: `self.items.pop()`  
修正後: `return self.items.pop()`

2つ目の回答は[pop()](https://docs.python.org/ja/3/tutorial/datastructures.html)を呼び出すたびに配列の末尾が1つポップしますので、お見込みの通り「stackの中身がなくなって`stack.size()`の戻り値が0になるまで」という解釈で合っています。


CC BY-SA 4.0
2020-07-30T13:32:03.497
69126
2020-07-30T13:32:03.497
9820
69125
answer