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

Python基础hangman项目无限while循环无法退出问题求助

Hangman经典版代码修复方案

核心bug根源

  • 游戏逻辑外层冗余的for i in range(len(x)+2)循环:内部while循环触发break退出后,外层for会再次迭代,重置所有计数变量重新开启while循环,导致用户猜对后依然被要求不断输入字符
  • 变量cc未提前初始化:如果用户第一次输入就正确输入start,程序会因为找不到cc变量抛出NameError
  • 猜对计数逻辑错误:用户重复输入同一个正确字母时,flag会重复累加,导致计数和实际猜对的唯一字母数不匹配
  • 输赢逻辑混淆:次数用尽和猜对单词都打印胜利提示,不符合Hangman游戏规则
  • 选单词逻辑冗余:不需要循环遍历所有分类多次取随机值,单次随机即可拿到目标单词

修复后可运行代码

import random
# 初始化所有变量避免未定义错误
cc = ""
d = input("ENTER START: ").lower()
sb = {
    "fruits": ("strawberry", "banana", "apple", "orange", "guava", "grapes"),
    "colours": ("red", "blue", "orange", "brown", "yellow"),
    "cars": ("maruti", "nano", "ferrari", "audi", "jaguar")
}
# 简化选单词逻辑,无需循环
keys = list(sb.keys())
random_category = random.choice(keys)
word_list = sb[random_category]
target_word = random.choice(word_list)
print(target_word) # 测试用可保留,正式游戏可删除

if d != "start":
    cc = input("Enter the CORRECT command in pls: ").lower()

if d == "start" or cc == "start":
    max_chance = len(target_word) + 2
    print(f"HINT 1:ok so I have chosen {random_category}!!!\n and you have {max_chance} chances to guess")
    # 移除冗余外层for循环,计数变量只初始化一次
    query = []
    chance = 0
    unique_letters = set(target_word.lower())
    while True:
        input_char = input("Enter the letter: ").lower()
        query.append(input_char)
        # 生成当前猜测结果
        output = " ".join([char if char in query else "_" for char in target_word.lower()])
        print(output)
        chance += 1
        # 统计猜对的唯一字母数,避免重复输入计数错误
        correct_count = len([c for c in unique_letters if c in query])
        # 输赢判断
        if correct_count == len(unique_letters):
            print("YIKES!!you won!!!")
            break
        if chance >= max_chance:
            print(f"Sorry you have used up all chances! The correct word is {target_word}")
            break

关键修改说明

  • 删除了游戏逻辑外层冗余的for循环,计数变量仅在游戏开始前初始化一次
  • 提前初始化cc变量,避免未定义报错
  • 简化了随机选分类和单词的逻辑,用random.choice替代手动生成随机索引取值,可读性更高
  • 猜对计数改为直接统计唯一匹配字母数,避免重复输入导致的计数错误
  • 拆分输赢判断逻辑,次数用尽时打印失败提示并给出正确答案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:05