简体   繁体   English

如何解决 Hangman Game 中的单词生成错误?

[英]How to solve word generation error in Hangman Game?

Q.Building Hangman Game. Q.建造刽子手游戏。 In the game of Hangman, the player only has 6 incorrect guesses (head, body, 2 legs, and 2 arms) before they lose the game.在 Hangman 游戏中,玩家只有 6 次错误猜测(头部、身体、2 条腿和 2 条手臂)才输掉游戏。 We loaded a random word list and picked a word from it.我们加载了一个随机单词列表并从中挑选了一个单词。 Then we wrote the logic for guessing the letter and displaying that information to the user.然后我们编写了猜测字母并将该信息显示给用户的逻辑。 In this exercise, we have to put it all together and add logic for handling guesses.在本练习中,我们必须将它们放在一起并添加处理猜测的逻辑。

So, I made the program with some help but stil there is a silly little problem coming that is the generation of a random word.所以,我在一些帮助下制作了这个程序,但仍然有一个愚蠢的小问题出现,那就是随机词的生成。

Please tell what I am doing wrong and if you would run this program that would help you better understand what I am saying.请告诉我我做错了什么,如果你会运行这个程序,这将帮助你更好地理解我在说什么。

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))

Modifications修改

  1. Corrects routine generate to provide random words.更正例程生成以提供随机单词。

  2. Always convert users input to uppercase始终将用户输入转换为大写

  3. Convert selected word to upper case将所选单词转换为大写

  4. slight change in variable naming so it conforms to PEP 8 (ie 'secret' rather than 'Secret')变量命名略有变化,因此它符合 PEP 8(即“秘密”而不是“秘密”)

Code代码

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))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM