前提・実現したいこと
書籍「独学プログラマー」のp.138~139のコードをそのまま入力して実行しました。エラーなく正常に動作したのですが、以下の2点がどうしても理解できなかったため、ご教示頂けますと幸いです。
発生している問題・エラーメッセージ
<1点目> charがelseの時に「wrong += 1」とするのは理解できるのですが、その後になぜ「e = wrong + 1」するのかが理解できません(当該書籍の説明では理解できませんでした)。 例えば初めてelseとなった場合、「wrong += 1」によりwrongは初期設定の0から1になりますが、そこから2行下の「e = wrong + 1」によりeは2になるはずです。そうなると「print("\n".join(stages[0:2]))」となるため、stageのインデックス0と1の要素が返されるはずなのですが、実際に実行してもインデックス0の要素しか返されません。おそらく当方が正しく理解できていないと見受けているのですが、この点についてご教示頂けますと幸いです。 <2点目> stagesの要素数は8つ(インデックスで0~7)のため、(世の中の解釈とは異なるかもしれませんが)8回間違えるとハングマンの「絵」が完成し「負け」になると解釈しております。 ただこのコードだと7回間違えると「負け」になってしまうため、8回間違えると「負け」になる様に変えたいのですが、「while wrong < len(stages) - 1:」や「e = wrong + 1」の箇所をどう変えても「7回間違えると『負け』」の設定になってしまいます。
該当のソースコード
Python
1def hangman(word): 2 wrong = 0 3 stages = ["", 4 "__________ ", 5 "| ", 6 "| | ", 7 "| 0 ", 8 "| /|\ ", 9 "| / \ ", 10 "| " 11 ] 12 rletters = list(word) 13 board = ["_"] * len(word) 14 win = False 15 print("ハングマンの世界にようこそ!") 16 while wrong < len(stages) - 1: 17 print("\n") 18 msg = "1文字を予想してね" 19 char = input(msg) 20 if char in rletters: 21 cind = rletters.index(char) 22 board[cind] = char 23 rletters[cind] = "$" 24 else: 25 wrong += 1 26 print(" ".join(board)) 27 e = wrong + 1 28 print("\n".join(stages[0:e])) 29 if "_" not in board: 30 print("あなたの勝ち!") 31 print(" ".join(board)) 32 win = True 33 break 34 if not win: 35 print("\n".join(stages[0:wrong + 1])) 36 print("あなたの負け!正解は {}。".format(word)) 37 38 39hangman("cat")
試したこと
<1点目>
「e = wrong + 1」を「e = wrong」と変更しても、結果は特に変わりませんでした(同じ結果が返されました)。
<2点目>
以下の変更を行っても、結果は特に変わりませんでした(同じ結果が返されました)。
・「while wrong < len(stages) - 1:」を「while wrong < len(stages) :」や「while wrong < len(stages) + 1:」へ変更してみた。
・「e = wrong + 1」を「e = wrong」へ変更してみた。
補足情報(FW/ツールのバージョンなど)
Anacondaで作成した仮想環境の下、Pycharmで実行した
Windows 10
Anaconda 2021年5月版
python 3.8.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/19 05:14