如何修复此代码以在刽子手游戏的正确位置写字母?

How can I fix this code to write letters in the correct place for a hangman game?

提问人:Soupy Dude 提问时间:11/15/2023 更新时间:11/15/2023 访问量:30

问:

我正在上一门基于 Python 的计算机科学入门课。我正在做的一个项目是使用 Python图形制作一个刽子手游戏。我希望这段代码能够做的是写出用户猜对的单词的字母,并在用户猜错时画出刽子手的某个部分。现在,当用户正确猜出一个字母时,程序正在写字母,但不是在正确的位置,有时甚至根本没有。

在我当前的版本中,我有一个 for 循环遍历当前单词的字母。如果用户猜测的字母与单词中的字母相同,则(word_typer) 旨在将该字母写在屏幕上的正确位置。我在 while 循环中有了这个 for 循环,其中我还有变量“place”来跟踪正在写的字母,但这似乎仍然不起作用。

wrong_guesses = 0
guess_letter = ""
wrong_letters = 0

play = input("The theme of this hangman is chemistry! Would you like to play? y/n ")

def run():
    global play, wrong_guesses, current_word, wrong_letters
    if (play.lower() == 'y'):
        new_word()
        place = 0
        while (wrong_guesses < 6):
            guess_letter = input('Please guess a letter ')
            letters_guessed.append(guess_letter)
            for letter in current_word:
                if guess_letter == letter:
                    word_typer.penup()
                    word_typer.goto(30 * place, 0)
                    word_typer.write(guess_letter, font=("Arial", 20, "bold"))
                    place += 1
            for i in current_word:
                if guess_letter != i:
                    wrong_letters += 1
            if wrong_letters == len(current_word):
                wrong_guesses += 1
                draw_hangman()
    else:
        print("Maybe next time!")
python 函数 turtle-graphics python-turtle

评论

1赞 Michael Butscher 11/15/2023
place += 1仅当当前字母是猜测的字母时才执行,但如果不是,也应该执行。它应该位于 if 块之外。一种更 Python 的方式是用于 for 循环。enumerate
0赞 NoDakker 11/15/2023
我会向你推荐我上个月研究的这个问题和答案“stackoverflow.com/questions/77370359/......”。
0赞 ggorlen 11/15/2023
该程序在基本级别上不起作用,可能缺少一些关键部分(初学者的导入)。您能否解决阻碍最小可重现示例的基本问题,以便可以专注于您真正要问的逻辑问题?例如,并且从不被调用,以及其他干扰。谢谢。NameError: name 'play' is not defined. Did you mean: 'place'?run()

答:

0赞 Dini 11/15/2023 #1

好吧,我没有从您发布的代码中找到足够的信息,您可以发送整个代码吗?

此外,我还设法以一种可以正常工作的方式修改代码(它缺少一些变量)。

wrong_guesses = 0
guess_letter = ""
wrong_letters = 0
letters_guessed = [] #stores the letter which are guessed by users

play = input("The theme of this hangman is chemistry! Would you like to play? y/n ")

def run():
    global wrong_guesses, current_word, wrong_letters
    if (play.lower() == 'y'):
        new_word() #should generate a new word and add it to current_word
        place = 0
        while (wrong_guesses < len(curent_word)):
            guess_letter = input('Please guess a letter ')
            letters_guessed.append(guess_letter)
            for letter in current_word:
                if letter == guess_letter:
                    word_typer.penup()
                    word_typer.goto(30 * place, 0)
                    word_typer.write(guess_letter, font=("Arial", 20, "bold"))
                    place += 1
                elif letter != guess_letter:
                    wrong_letters += 1

希望此代码对您有所帮助!

评论

0赞 Community 11/15/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。