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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:45:07