You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修复说明

  1. 接收返回值:将difficultySelector()的返回结果赋值给全局secretWord,确保不同难度能获取对应列表的随机单词。
  2. 调整初始化顺序:先初始化wrongCounter等变量,再调用依赖这些变量的函数,避免未定义错误。
  3. 修正猜字母逻辑:改为判断字母是否存在于单词中,同时处理重复猜字母的情况,符合游戏常规规则。
  4. 优化显示逻辑:previousInputs函数中未猜对的位置显示_而非空格,提升视觉清晰度;增加游戏结束的结果提示。

内容的提问来源于stack exchange,提问作者Outblast2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:20:22