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

Hangman项目while循环问题求助:字母匹配位置错误

Hangman项目while循环问题修复

原代码核心问题

  • 结果更新逻辑错误:每次输入字符时直接追加字符或下划线,没有对应到目标单词的正确索引位置,无法准确显示已猜中字符的位置。
  • 冗余循环:for word in guess完全多余,guess已是单个字符,循环仅执行一次,无实际作用。
  • 未保留历史猜对结果:每次输入新字符时未基于之前的正确结果更新,导致之前猜对的字符丢失。
  • 未处理猜错计数:猜错时未递增attempts变量,尝试次数限制失效。

修正后的代码

import random 

word_list = ['book','banana','peach','car','house','people','chair','table','juice','sleep','window']
get_word = random.choice(word_list)  # 简化随机选单词逻辑
result = ["_"] * len(get_word)  # 用列表存储结果,方便修改对应位置
print("The word is", "".join(result))
attempts = 0

while attempts < 5:
    print("Enter a letter")
    guess = input().lower()  # 统一转小写,避免大小写不匹配问题
    if len(guess) != 1:
        print("请输入单个字符!")
        continue
    
    correct_guess = False
    # 遍历目标单词的索引和字符,更新对应位置的结果
    for idx, char in enumerate(get_word):
        if char == guess:
            result[idx] = guess
            correct_guess = True
    
    if not correct_guess:
        attempts += 1
        print(f"猜错了!剩余尝试次数:{5 - attempts}")
    
    # 打印当前结果
    print("当前结果:", "".join(result))
    
    # 检查是否完全猜中
    if "_" not in result:
        print("恭喜你猜对了!")
        break
else:
    print(f"游戏结束,正确单词是:{get_word}")

关键修改说明

  1. 用列表存储结果:字符串是不可变类型,列表可以直接修改对应索引的元素,确保猜中字符能显示在正确位置。
  2. 遍历目标单词更新结果:通过enumerate同时获取字符的索引和内容,匹配时精准更新result的对应位置,保留之前猜对的所有字符。
  3. 增加猜对标记:通过correct_guess判断本次猜测是否正确,猜错时递增尝试次数并提示剩余次数。
  4. 大小写兼容:将输入转为小写,避免因大小写差异导致的匹配失败。
  5. 游戏结束判断:提前检测是否完全猜中单词,或尝试次数耗尽后显示正确答案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:40:48