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

Python元素猜谜游戏:错误3次后无限循环无法进入下一题的问题

元素猜谜游戏循环问题修复

问题说明

我开发了一款Python元素猜谜游戏,核心逻辑是从元素列表随机抽取元素并展示提示,用户最多可进行3次猜测。原代码通过out_of_guesses布尔变量控制流程,3次错误后会提示并进入下一题。但修改代码时移除了这个判断,改为在while guess != randomelement循环中处理次数限制,导致用户3次错误后,程序持续循环打印wronganswers列表内容,无法进入下一题。我需要实现3次错误后给出一次提示并自动进入下一题的功能。

原工作代码

import time
import random
# 声明变量和常量
guessingelement = ["Hydrogen", "Magnesium", "Cobalt", "Mercury", "Aluminium", "Uranium", "Antimony"]
nicephrases = ["Nice job", "Marvellous", "Wonderful", "Bingo", "Dynamite"]
guess = ""
guess_count = 0
guess_limit = 3
out_of_guesses = False
guess_no = 0
score = 0

# 设置题目循环次数,随机抽取元素后从列表移除
for i in range(7):
    randomelement = random.choice(guessingelement)
    guessingelement.remove(randomelement)
    time.sleep(2)

    # 元素提示
    if randomelement == "Hydrogen" and not out_of_guesses:
        print("Tip 1: It is the most flammable of all the known substances.")
        print("Tip 2: It reacts with oxides and chlorides of many metals, like copper, lead, mercury, to produce free metals.")
        print("Tip 3: It reacts with oxygen to form water.")

        # 限制错误猜测次数不超过3次
        while guess != randomelement and not(out_of_guesses):
            if guess_count < guess_limit:
                guess = input("Enter guess: ")
                guess_count += 1
            else:
                out_of_guesses = True

        # 根据结果计分、反馈
        if out_of_guesses:
            print("Out of Guesses, NICE EFFORT!")
        else:
            print(random.choice(nicephrases), ", YOU GET IT!")
            score = score + 1

    # 其他元素的提示和逻辑和Hydrogen一致,此处省略
    if randomelement == "Magnesium" and not out_of_guesses:
        print("Tip 1: It has the atomic number of 12.")
        print("Tip 2: It's oxide can be extracted into free metal through electrolysis.")
        print("Tip 3: It is a type of metal.")
        # 重复Hydrogen的猜测逻辑

修改后出错的代码片段

# 元素提示
if randomelement == "Hydrogen":
    print("Tip 1: It is the most flammable of all the known substances.")
    print("Tip 2: It reacts with oxides and chlorides of many metals, like copper, lead, mercury, to produce free metals.")
    print("Tip 3: It reacts with oxygen to form water.")

# 限制错误猜测次数不超过3次
while guess != randomelement:
    if guess_count < guess_limit:
        guess = input("Enter guess: ")
        guess_count += 1
    else:
        print(random.choice(wronganswers))

# 结果反馈
else:
    print(random.choice(nicephrases), ", YOU GET IT!")
    score = score + 1

问题原因及修复方案

问题根源

修改后的while循环在用户用完3次猜测机会后,因为guess始终不等于randomelement,循环条件一直成立,会反复执行print(random.choice(wronganswers)),无法终止循环进入下一题。此外,原代码中每道题的guess_count和guess没有重置,会导致下一题继承上一题的计数。

修复后的完整代码

import time
import random
# 声明变量和常量
guessingelement = ["Hydrogen", "Magnesium", "Cobalt", "Mercury", "Aluminium", "Uranium", "Antimony"]
nicephrases = ["Nice job", "Marvellous", "Wonderful", "Bingo", "Dynamite"]
wronganswers = ["Oops, try again!", "Wrong, have another go!", "Not quite, keep trying!"]  # 补充缺失的wronganswers列表
guess_limit = 3
score = 0

# 设置题目循环次数,随机抽取元素后从列表移除
for i in range(7):
    # 每道题重置猜测状态
    guess = ""
    guess_count = 0
    randomelement = random.choice(guessingelement)
    guessingelement.remove(randomelement)
    time.sleep(2)

    # 元素提示
    if randomelement == "Hydrogen":
        print("\n--- 新题目 ---")
        print("Tip 1: 它是已知物质中最易燃的。")
        print("Tip 2: 它能与许多金属的氧化物和氯化物(如铜、铅、汞)反应生成游离金属。")
        print("Tip 3: 它与氧气反应生成水。")
    elif randomelement == "Magnesium":
        print("\n--- 新题目 ---")
        print("Tip 1: 它的原子序数是12。")
        print("Tip 2: 它的氧化物可通过电解提取出游离金属。")
        print("Tip 3: 它是一种金属。")
    # 其他元素的提示可继续补充elif分支

    # 猜测逻辑处理
    while guess != randomelement:
        if guess_count < guess_limit:
            guess = input("请输入你的猜测: ").strip()
            guess_count += 1
            # 如果猜对,直接跳出循环
            if guess == randomelement:
                break
        else:
            # 用完次数后,打印一次提示并跳出循环
            print(f"用完所有猜测机会啦!正确答案是{randomelement},再接再厉!")
            break

    # 结果反馈
    if guess == randomelement:
        print(random.choice(nicephrases), ", 答对了!")
        score += 1

print(f"\n游戏结束!你的最终得分是: {score}/7")

关键修改点

  1. 每道题重置状态:在for循环内部重置guess和guess_count,确保每道题的猜测计数从零开始。
  2. 终止循环逻辑:当用完3次猜测机会时,打印提示后用break跳出while循环,避免无限循环。
  3. 补充缺失的wronganswers列表:原修改代码中用到但未定义的列表,补充完整。
  4. 优化提示结构:添加题目分隔线,提升用户体验;将英文提示改为中文(可根据需求改回英文)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:55:23