Python Hangman游戏难度选择异常:secretWord始终返回固定值
Hangman游戏难度选择无效问题排查与修复
问题根源
- 未接收难度函数返回值:调用
difficultySelector()后没有将返回的随机单词赋值给全局secretWord变量,导致后续代码使用的secretWord是环境残留的beautiful(或直接触发未定义错误)。 - 变量初始化顺序错误:调用
hangmanGraphics(wrongCounter)时,wrongCounter还未定义,程序会抛出NameError。 - 猜字母逻辑错误:当前通过
secretWord[noOfGuesses] == userGuess按位置匹配字母,而非检查字母是否存在于单词中,不符合Hangman游戏的常规规则。
修复后的完整代码
import random print("Welcome to Devil's Hangman") easy_list = ['trick','trout','youth','guess','gucci','treat'] medium_list = ['banker','traitor','monopoly','acoustic','beautiful','cafeteria'] hard_list = ['characteristics','sagittarius','personality','psychologist','photosynthesis','classification'] def printEmptyBlanks(): for letter in secretWord: print("_", end=" ") def hangmanGraphics(wrongCounter): if wrongCounter == 0: print(' __________\n |\n |\n |\n |\n/_\ ') elif wrongCounter == 1: print(' __________\n | |\n |\n |\n |\n/_\ ') elif wrongCounter == 2: print(' __________\n | |\n | O\n |\n |\n/_\ ') elif wrongCounter == 3: print(' __________\n | |\n | O\n | |\n |\n/_\ ') elif wrongCounter == 4: print(' __________\n | |\n | O\n | /|\n |\n/_\ ') elif wrongCounter == 5: print(' __________\n | |\n | O\n | /|\ \n |\n |\n/_\ ') elif wrongCounter == 6: print(' __________\n | |\n | O\n | /|\ \n | /\n/_\ ') elif wrongCounter == 7: print(' __________\n | |\n | O\n | /|\ \n | / \ \n/_\ ') def previousInputs(lettersguessed): rightLetters = 0 for char in secretWord: if char in lettersguessed: print(char, end=" ") rightLetters += 1 else: print("_", end=" ") return rightLetters def wordLines(): print("\r") for char in secretWord: print("\u203E", end=" ") def difficultySelector(): isValidInput = False while not isValidInput: userDifficulty = str(input("Lets Begin by choosing your difficulty for 'Easy', 'Medium' or 'Hard': ")).lower() if userDifficulty == 'easy': return random.choice(easy_list) elif userDifficulty == 'medium': return random.choice(medium_list) elif userDifficulty == 'hard': return random.choice(hard_list) else: print("Invalid Entry.Please type only 'Easy', 'Medium' or 'Hard'") # 修复:接收难度选择返回的单词 secretWord = difficultySelector() # 修复:先初始化变量再调用函数 wrongCounter = 0 noOfGuesses = 0 lettersTried = [] correctLetters = 0 secretWordLength = len(secretWord) hangmanGraphics(wrongCounter) printEmptyBlanks() wordLines() while wrongCounter != 8 and correctLetters != secretWordLength: print("\nLetters guessed so far: ") for letter in lettersTried: print(letter, end=" ") userGuess = input("\nGuess a letter: ").lower() # 修复:判断字母是否在单词中,增加重复猜字母的处理 if userGuess in secretWord and userGuess not in lettersTried: lettersTried.append(userGuess) hangmanGraphics(wrongCounter) correctLetters = previousInputs(lettersTried) wordLines() elif userGuess in lettersTried: print("\nYou've already guessed this letter!") hangmanGraphics(wrongCounter) correctLetters = previousInputs(lettersTried) wordLines() else: wrongCounter += 1 lettersTried.append(userGuess) hangmanGraphics(wrongCounter) correctLetters = previousInputs(lettersTried) wordLines() print("\nGame is over!") if correctLetters == secretWordLength: print(f"Congratulations! You guessed the word: {secretWord}") else: print(f"Sorry, you lost. The correct word was: {secretWord}")
关键修复说明
- 接收返回值:将
difficultySelector()的返回结果赋值给全局secretWord,确保不同难度能获取对应列表的随机单词。 - 调整初始化顺序:先初始化
wrongCounter等变量,再调用依赖这些变量的函数,避免未定义错误。 - 修正猜字母逻辑:改为判断字母是否存在于单词中,同时处理重复猜字母的情况,符合游戏常规规则。
- 优化显示逻辑:
previousInputs函数中未猜对的位置显示_而非空格,提升视觉清晰度;增加游戏结束的结果提示。
内容的提问来源于stack exchange,提问作者Outblast2
相关产品推荐
相关产品推荐

