Python猜单词游戏如何提示用户重复输入的字母已被猜测
猜单词游戏重复输入检测功能修复方案
原代码存在的核心问题
- 逻辑顺序错误:将用户输入直接加入猜测列表后才做重复校验,导致每次判断都会命中「已输入」条件
- 大小写匹配错误:校验时直接用原始输入的
guess和存储了全小写内容的guesses列表比对,大小写不一致时判断失效 - 重复冗余操作:命中重复输入时又额外向列表追加了一次输入内容,造成无效存储
- 错误计数逻辑缺失:定义了
errors变量但未使用,没有做错误次数扣减和失败判定,原代码永远不会触发「游戏失败」分支 - 游戏结束逻辑混乱:退出循环的条件只有「全部字母猜对」,
game_over的判断逻辑颠倒,导致失败分支永远无法执行
修正后的可运行代码
word = "Programming".upper() max_errors = 5 # 最大允许错误次数 remaining_errors = max_errors guesses = [] game_over = False win = False print("Welcome to family feud") while not game_over: # 打印当前猜词进度 current_display = [] for letter in word: if letter.lower() in guesses: current_display.append(letter) else: current_display.append("_") print(" ".join(current_display)) print(f"剩余错误次数:{remaining_errors}") # 接收输入并做重复校验 guess = input("Next Guess:").strip().lower() # 先判断是否重复,再决定是否加入列表 if guess in guesses: print("You already input this letter") continue # 重复输入直接跳过后续逻辑,不扣次数也不记录 guesses.append(guess) # 判断是否猜对 if guess not in word.lower(): remaining_errors -= 1 print("Wrong") # 判定游戏是否结束 # 情况1:错误次数用完,失败 if remaining_errors <= 0: game_over = True win = False # 情况2:所有字母都猜对,胜利 all_guessed = True for letter in word: if letter.lower() not in guesses: all_guessed = False break if all_guessed: game_over = True win = True if win: print(f"You won the Game! {word} !") else: print(f"Game Over! The word was: {word}")
关键修改说明
- 调整了校验顺序:先判断输入是否已经存在于
guesses列表,重复就直接提示并跳过后续逻辑,不记录也不扣错误次数 - 统一了输入的大小写处理:所有输入都转成小写后再做比对和存储,避免大小写不同导致的判断失效
- 补全了错误计数逻辑:错误输入后扣减剩余次数,次数用完直接结束游戏判定为失败
- 拆分了胜利和失败的判定逻辑,两个分支都可以正常触发
内容的提问来源于stack exchange,提问作者Kacey
相关产品推荐
相关产品推荐

