44868


ハングマンのプログラムを作成していますが躓いております。  
何が実行されて何が上手く実行されていないのか理解できておりません。

  * ユーザーに１文字づつ入力していただき、その都度成功ならば残りの文字を入力していく。
  * 失敗ならハングマンが進んでいき、一定回数が来たら失敗で、失敗メッセージを。
  * ある単語（ここではhope）が入力されれば成功メッセージを。

というようなプログラムを組みたいのですが。  
hopeの一文字でも入力されると成功メッセージが出てしまいます。  
本来であれば＿＿＿＿の中にその入力された適当な一文字が表示される予定です。  
また、hopeでない文字が入力された場合は、ハングマンが進むだけにしたいのですが何故か成功メッセージが出てしまいます。  
恐縮ですが、このコードの間違えている点を教えていただければ幸いです。

以下にコードを書きます。

[code]

    def hangman(word):
        wrong = 0
        stages = ["",
                    "-----------           ",
                    "|           |         ",
                    "|           |         ",
                    "|           O         ",
                    "|          /|\        ",
                    "|          / \        ",
                    "|                     ",
                    "|                     ",
                    "|                     ",
                    ]
        rletters = list(word)
        board = ["__" * len(word)]
        win = False
        print("Welcome to MY GAME!")
        while wrong < len(stages) - 1:
            print("\n")
            msg = "Guess a word I like that is a part of your name."
            char = input(msg)
            if char in rletters:
                cind = rletters.index(char)
                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("Good! I know you know it.")
                print(" ".join(board))
                win = True
                break
        if not win:
            print("\n".join(stages[0: wrong]))
            print("Study more about yourself.lol  It is {'hope'}?".format(word))
    hangman("hope")
    
[/code]


CC BY-SA 4.0
2018-06-18T17:16:33.397
44863
2018-06-19T00:15:49.940
2018-06-18T17:27:40.730
3060
28620
question
python python3
コードを書き実行したのですが上手くいきません。


1カ所、意図していないコードになっているようです。

[code]

    board = ["__" * len(word)]
    
[/code]

これは以下が正しそう。

[code]

    board = ["__"] * len(word)
    
[/code]

boardには、文字の長さ分だけ要素を持たせたいはずなので、かけ算の位置が違います。

* * *

こういったバグの原因を調べるのに、pdbが便利です。 `python3 -m pdb hangman.py` のように実行して、 `s`
で1行ずつ実行したり、 `list` でコードを見たり、 `p <変数名>` で現在の値を見たりできます。詳しくは
<https://docs.python.org/ja/3/library/pdb.html#debugger-commands> を参照してください。


CC BY-SA 4.0
2018-06-19T00:15:49.940
44868
2018-06-19T00:15:49.940
806
44863
answer