如何让每个if语句输出不同内容?吊死鬼游戏打印问题求助
吊死鬼(Hangman)游戏问题修复方案
核心问题分析
- 你当前代码里嵌套的
if guess not in list判断条件重复,导致每次猜错会一次性执行所有打印语句,直接输出完整的吊死鬼图形。 - 缺少错误次数计数器,无法根据猜错的次数逐步显示身体部位。
- 原代码存在小bug:单词列表里
hamster和fish之间缺少逗号,会被拼接成hamsterfish,需要修正。 - 猜对字符时的输出逻辑错误,应该显示猜对的字符而非固定文字"correct"。
修复后的代码
import random # 修正列表的逗号问题 word_list = ['dog', 'cat', 'snake', 'hamster', 'fish'] secret_word = random.choice(word_list) guesses = '' # 设定最大错误次数,对应吊死鬼的身体部位阶段 max_wrong_guesses = 6 wrong_guesses = 0 # 定义吊死鬼的各个阶段,索引对应错误次数 hangman_stages = [ # 0次错误:只有架子 """ _______ | | | | _______ """, # 1次错误:头部 """ _______ | | | O | _______ """, # 2次错误:头部+身体 """ _______ | | | O | | _______ """, # 3次错误:头部+身体+左臂 """ _______ | | | O | /| _______ """, # 4次错误:头部+身体+双臂 """ _______ | | | O | /|\\ _______ """, # 5次错误:头部+身体+双臂+左腿 """ _______ | | | O | /|\\ | / _______ """, # 6次错误:完整吊死鬼(游戏结束) """ _______ | | | O | /|\\ | / \\ _______ """ ] while wrong_guesses < max_wrong_guesses: failed = 0 # 打印当前的单词状态 for char in secret_word: if char in guesses: print(char, end=' ') else: print('_', end=' ') failed += 1 if failed == 0: print("\n你赢了!") print(f"单词是:{secret_word}") break # 打印当前错误次数对应的吊死鬼图形 print(hangman_stages[wrong_guesses]) # 获取用户输入并处理 guess = input("猜一个字符:").lower() # 确保输入是单个字母 if len(guess) != 1 or not guess.isalpha(): print("请输入单个英文字母!") continue # 如果已经猜过这个字符 if guess in guesses: print("你已经猜过这个字符了!") continue guesses += guess # 判断是否猜错 if guess not in secret_word: wrong_guesses += 1 print(f"猜错了!你还有 {max_wrong_guesses - wrong_guesses} 次机会。") # 当错误次数用完时,游戏结束 if wrong_guesses == max_wrong_guesses: print(hangman_stages[-1]) print(f"你输了!正确单词是:{secret_word}")
关键改进点说明
- 错误次数计数器:用
wrong_guesses变量记录每次猜错的次数,每次猜错就递增1。 - 分阶段图形:把吊死鬼的每个阶段存进
hangman_stages列表,根据wrong_guesses的值打印对应阶段的图形,实现逐步显示身体部位。 - 输入合法性校验:限制用户只能输入单个英文字母,避免无效输入干扰游戏逻辑。
- 修正字符显示:猜对字符时直接显示该字符,而非输出"correct",符合游戏常规逻辑。
- 修复列表bug:补上单词列表中缺失的逗号,避免生成错误的单词。
内容的提问来源于stack exchange,提问作者pyth0n guy
相关产品推荐
相关产品推荐

