Python版Hangman游戏:错误猜测时逐步显示绞刑架的实现问题
解决Hangman游戏绞刑架逐步显示问题
问题根源
你的代码有三个核心问题导致绞刑架无法逐步更新:
displayScaffold函数参数错误:应该传入当前错误次数wrong,而非最大错误次数MAX_WRONG- 绞刑架阶段顺序颠倒:错误次数为0时应显示空绞刑架,但你定义的
stages数组第一个元素是完整绞刑架,最后一个才是空的 - 未在每次错误后重新渲染绞刑架,且初始显示时误用了
MAX_WRONG作为参数
修正后的完整代码
import random def displayScaffold(wrong_guesses): """根据错误猜测次数返回对应阶段的绞刑架图形""" # 顺序调整:索引0对应0次错误(空绞刑架),索引6对应6次错误(完整绞刑架) stages = ( """ ---------- |/ | | | | | --- """, """ ---------- |/ | | o | | | --- """, """ ---------- |/ | | o | | | | --- """, """ ---------- |/ | | o | /| | | --- """, """ ---------- |/ | | o | /|\\ | | --- """, """ ---------- |/ | | o | /|\\ | / | --- """, """ ---------- |/ | | o | /|\\ | / \\ | --- """ ) return stages[wrong_guesses] WORDS = ( "PYTHON", "ESTIMATE", "DIFFICULT", "ANSWER", "XYLOPHONE", "UNNECESSARY", "ADEQUATE", "FEASIBLE", "CHARACTER", "CONGRATULATIONS", "SEQUENCE", "POSITION", "PROGRAM" ) MAX_WRONG = 6 word = random.choice(WORDS) so_far = "-" * len(word) wrong = 0 used = [] print("\nWelcome to the Hangman Game!") print(f"\nYou have {MAX_WRONG} wrong attempts to guess the word.") # 初始显示0次错误对应的空绞刑架 print(displayScaffold(wrong)) while wrong < MAX_WRONG and so_far != word: print(f"\n{so_far}\n") guess = input("Enter a letter: ").upper() while guess in used: print(f"\nYou have already guessed this letter: {guess}\a") guess = input("Enter a letter: ").upper() used.append(guess) if guess in word: print(f"\nYes, {guess} is in the word.") new = "" for i in range(len(word)): if guess == word[i]: new += guess else: new += so_far[i] so_far = new # 猜对后也可以保留显示当前绞刑架(可选) print(displayScaffold(wrong)) else: print(f"\nSorry, {guess} isn't in the word.\a") wrong += 1 left = MAX_WRONG - wrong print(f"\nYou have {left} guesses left.") # 错误后立即更新显示绞刑架 print(displayScaffold(wrong)) if wrong == MAX_WRONG: print("\nYou've been hanged!\a") else: print("\nYou guessed it!\a") print(f"\nThe word was {word}") input("\nPress Enter to exit")
关键修改说明
- 函数参数与docstring优化:
- 将函数参数改为
wrong_guesses(当前错误次数),并添加规范的docstring说明功能
- 将函数参数改为
- 调整stages顺序:
- 让索引0对应0次错误的空绞刑架,索引6对应6次错误的完整绞刑架,保证错误次数与图形阶段一一对应
- 更新渲染时机:
- 初始显示时传入
wrong=0,显示空绞刑架 - 每次错误后调用
displayScaffold(wrong),实时更新绞刑架图形 - 可选:猜对后也保留绞刑架显示,让界面更连贯
- 初始显示时传入
- 小细节优化:
- 用f-string替代旧式字符串拼接,代码更简洁
- 修正了原代码中斜杠的显示错误(
/|/改为/|\,符合标准绞刑架图形)
内容的提问来源于stack exchange,提问作者AJHedges
相关产品推荐
相关产品推荐

