前提・実現したいこと
プログラミングの初心者です。おそらく初歩的な内容かと思いますが、どうしても解決できず誰かお助けください。現在「独学プログラマー Python言語の基本から仕事のやり方まで」 でpythonを学んでおり、その中で出てくるハングマンのゲームを作る課題に取り組んでいます。自分で本から写したコードがどうしても動かなかったので、著者の正解のコードをベタ貼りしても動かず、どこが間違っているかわかる方教えて下さい。
発生している問題・エラーメッセージ
正解の文字を含むワードを入力してもif文のTRUE条件に進まず、else文の方に進んでしまう。自分のコードでも著者の提供コードでも同じ動作となります。
該当のソースコード
def hangman(word): wrong = 0 stages = ["", "_________ ", "| ", "| | ", "| 0 ", "| /|\ ", "| / \ ", "| " ] rletters = list(word) print(rletters) board = ["_"] * len(word) win = False print("ハングマンへようこそ!") while wrong < len(stages) - 1: print("\n") msg = "文字を予想してね" char = input(msg) if char in rletters: print(char) print("正解を含んでます") cind = rletters.index(char) print(cind) board[cind] = char rletters[cind] = '$' else: wrong += 1 print(" ".join(board)) e = wrong + 1 print("\n".join(stages[0:e])) if "_" not in board: print("You're winner!!!") print(" ".join(board)) win = True break if not win: print("\n".join(stages[0:wrong+1])) print("You lose! 正解は {}".format(word)) hangman("cat")
試したこと
当方の検証では
if char in rletters:
の部分が間違っているということはわかるのですが、どう書けばいいのかがわかりません。また著者の正解コードでもここの記載は同じになっているので、PythonのVerの問題なのかなと思ったりしております(当方のPythonは3.8.2)。
char のリストとrlettersのリストの文字単位の包含チェックがうまく動いていないので、試しに
if char[0] in rletters[0]:
として、1文字目に正解のワード(以下ではcasというワードを入れています)を入れてみるとif文のTRUE条件に進みますが、次は以下のエラーで止まってしまいます。rlettersにcharの内容が含まれていないとなっていますが、この部分もどう書けばいいかわかりません。著者の正解コードもこの書き方になっています、
Traceback (most recent call last):
File "/Users/mtamaoki/Desktop/MyPython/book/hangmangame.py", line 43, in <module>
hangman("cat")
File "/Users/mtamaoki/Desktop/MyPython/book/hangmangame.py", line 25, in hangman
cind = rletters.index(char)
ValueError: 'cas' is not in list
回答1件
あなたの回答
tips
プレビュー