Python 如何解决Hangman游戏中的单词生成错误?

Python 如何解决Hangman游戏中的单词生成错误?,python,Python,建筑刽子手游戏。在《刽子手》游戏中,玩家在输掉游戏之前只有6次错误的猜测(头部、身体、2条腿和2只手臂)。我们加载了一个随机单词列表并从中选择了一个单词。然后我们编写了猜测字母并向用户显示该信息的逻辑。在本练习中,我们必须将其全部放在一起,并添加处理猜测的逻辑 因此,我在一些帮助下制作了这个程序,但仍然有一个愚蠢的小问题即将出现,那就是生成一个随机单词 请告诉我做错了什么,如果你想运行这个程序,这将帮助你更好地理解我说的话 import random def generate():

建筑刽子手游戏。在《刽子手》游戏中,玩家在输掉游戏之前只有6次错误的猜测(头部、身体、2条腿和2只手臂)。我们加载了一个随机单词列表并从中选择了一个单词。然后我们编写了猜测字母并向用户显示该信息的逻辑。在本练习中,我们必须将其全部放在一起,并添加处理猜测的逻辑

因此,我在一些帮助下制作了这个程序,但仍然有一个愚蠢的小问题即将出现,那就是生成一个随机单词

请告诉我做错了什么,如果你想运行这个程序,这将帮助你更好地理解我说的话

import random


def generate():
    Words = []
    with open('sowpods.txt', 'r') as f:
        line = f.readline().strip()
        Words.append(line)
        while line:
            line = f.readline().strip()
            Words.append(line)
    index = random.randint(0, len(Words) - 1)
    return Words[index]


def ask_user_for_next_letters():
    letter = input("Guess Your Letter: ")
    return letter.strip().upper()


def generate_word_string(word, letter_guessed):
    output = []
    for letter in word:
        if letter in letter_guessed:
            output.append(letter.upper())
        else:
            output.append("_")
    return " ".join(output)


print("Welcome To Hangman!")
if __name__ == "__main__":
    Secret = generate()
    letter_to_guess = set(Secret)
    correct_letters = set()
    incorrect_letters = set()
    num_guesses = 0
    while (len(letter_to_guess) > 0) and num_guesses < 6:
         guess = ask_user_for_next_letters()
         #Checks If We Already Guessed That Letter
         if guess in correct_letters or guess in incorrect_letters:
             print("You Already Guessed That!")
             continue
         #If The Guess Was Correct
         if guess in letter_to_guess:
         #Update The letter_to_guess
             letter_to_guess.remove(guess)
         #Update The Correct Letters Guessed
             correct_letters.add(guess)
         else:
             incorrect_letters.add(guess)
             #Only Update The Number Of Guesses
             #If You Guess Incorrectly
             num_guesses += 1

         word_string = generate_word_string(Secret, correct_letters)
         print(word_string)
         print("You Have {} Guesses Left".format(6 - num_guesses))
     #Tell The User They Have Won Or Lost
     if num_guesses < 6:
         print("Congratulations! You Correctly Guessed The Word {}!".format(Secret))
     else:
         print("Loser!".format(Secret))
随机导入
def generate():
单词=[]
以open('sowpods.txt','r')作为f:
line=f.readline().strip()
Words.append(行)
while line:
line=f.readline().strip()
Words.append(行)
索引=random.randint(0,len(单词)-1)
返回单词[索引]
def向用户询问下一个字母()
字母=输入(“猜你的字母:”)
返回字母.strip().upper()
def生成单词字符串(单词、字母猜测):
输出=[]
对于大写字母:
如果字母中的字母被猜到:
output.append(letter.upper())
其他:
output.append(“\”)
返回“”连接(输出)
打印(“欢迎来到刽子手!”)
如果名称=“\uuuuu main\uuuuuuuu”:
Secret=generate()
字母\u到\u guess=集合(秘密)
更正字母=集合()
不正确的字母=集合()
num_猜测=0
而(len(字母到猜测)>0)和num(猜测)<6:
猜测=向用户询问下一个字母()
#检查我们是否已经猜到了那封信
如果猜测字母正确或猜测字母错误:
打印(“你已经猜到了!”)
持续
#如果猜测正确的话
如果用字母_至_猜测:
#将字母_更新为_guess
字母到猜。删除(猜)
#更新猜测的正确字母
更正字母。添加(猜测)
其他:
不正确的字母。添加(猜测)
#只更新猜测的数量
#如果你猜错了
num_猜测+=1
单词字符串=生成单词字符串(机密、正确的字母)
打印(字串)
打印(“您还有{}个猜测”。格式(6-num_猜测))
#告诉用户他们赢了或输了
如果num_猜测值小于6:
打印(“恭喜!你猜对了单词{}!”。格式(秘密))
其他:
打印(“失败者!”。格式(机密))

修改

  • 更正例程生成以提供随机字

  • 始终将用户输入转换为大写

  • 将所选单词转换为大写

  • 变量命名略有变化,因此符合PEP 8(即“机密”而非“机密”)

  • 代码

    import random
    
    def generate():
        words = []
        with open('sowpods.txt', 'r') as f:
            for line in f:
              line = line.strip()
              if line:
                words.append(line)
    
        return random.choice(words).upper()
    
    def ask_user_for_next_letters():
        letter = input("Guess Your Letter: ")
        return letter.strip().upper()
    
    def generate_word_string(word, letter_guessed):
        output = []
        for letter in word:
            if letter in letter_guessed:
                output.append(letter.upper())
            else:
                output.append("_")
        return " ".join(output)
    
    if __name__ == "__main__":
        print("Welcome To Hangman!")
    
        secret = generate()
    
        letter_to_guess = set(secret)
    
        correct_letters = set()
        incorrect_letters = set()
    
        num_guesses = 0
        while (len(letter_to_guess) > 0) and num_guesses < 6:
             guess = ask_user_for_next_letters()
             #Checks If We Already Guessed That Letter
             if guess in correct_letters or guess in incorrect_letters:
                 print("You Already Guessed That!")
                 continue
             #If The Guess Was Correct
             if guess in letter_to_guess:
             #Update The letter_to_guess
                 letter_to_guess.remove(guess)
             #Update The Correct Letters Guessed
                 correct_letters.add(guess)
             else:
                 incorrect_letters.add(guess)
                 #Only Update The Number Of Guesses
                 #If You Guess Incorrectly
                 num_guesses += 1
    
             word_string = generate_word_string(secret, correct_letters)
             print(word_string)
             print("You Have {} Guesses Left".format(6 - num_guesses))
         #Tell The User They Have Won Or Lost
        if num_guesses < 6:
            print("Congratulations! You Correctly Guessed The Word {}!".format(secret))
        else:
            print("Loser!".format(secret))
    
    随机导入
    def generate():
    单词=[]
    以open('sowpods.txt','r')作为f:
    对于f中的行:
    line=line.strip()
    如果行:
    words.append(行)
    返回random.choice(单词).upper()
    def向用户询问下一个字母()
    字母=输入(“猜你的字母:”)
    返回字母.strip().upper()
    def生成单词字符串(单词、字母猜测):
    输出=[]
    对于大写字母:
    如果字母中的字母被猜到:
    output.append(letter.upper())
    其他:
    output.append(“\”)
    返回“”连接(输出)
    如果名称=“\uuuuu main\uuuuuuuu”:
    打印(“欢迎来到刽子手!”)
    secret=generate()
    字母\u到\u guess=集合(秘密)
    更正字母=集合()
    不正确的字母=集合()
    num_猜测=0
    而(len(字母到猜测)>0)和num(猜测)<6:
    猜测=向用户询问下一个字母()
    #检查我们是否已经猜到了那封信
    如果猜测字母正确或猜测字母错误:
    打印(“你已经猜到了!”)
    持续
    #如果猜测正确的话
    如果用字母_至_猜测:
    #将字母_更新为_guess
    字母到猜。删除(猜)
    #更新猜测的正确字母
    更正字母。添加(猜测)
    其他:
    不正确的字母。添加(猜测)
    #只更新猜测的数量
    #如果你猜错了
    num_猜测+=1
    单词字符串=生成单词字符串(机密、正确的字母)
    打印(字串)
    打印(“您还有{}个猜测”。格式(6-num_猜测))
    #告诉用户他们赢了或输了
    如果num_猜测值小于6:
    打印(“恭喜!你猜对了单词{}!”。格式(秘密))
    其他:
    打印(“失败者!”。格式(机密))
    
    请特别注意您希望发生的事情,以及您需要帮助的具体情况。这里没有一个可以回答的问题。解决方案是正确的。