You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

猜歌文本游戏中While循环未执行全部代码且无限循环问题求助

问题分析与修复方案

看起来你的猜歌游戏循环逻辑出了两个关键问题,导致要么没输出要么无限循环:

核心问题点

  • 输入仅执行一次:你把input()放在了循环外面,不管循环跑多少次,程序永远用第一次输入的答案,不会让用户进行第二次尝试输入。
  • 答对后未终止循环:当用户猜对歌曲时,代码里没有修改x的值,也没有跳出循环的逻辑,导致x一直是0,while x != 2的条件永远成立,程序就会无限重复打印"LOADING..."。

修复后的代码

我调整了代码结构,把输入放到循环内,同时在答对后直接终止循环,确保流程符合预期:

import time

# 假设这里已经定义了song变量和score变量(示例值)
song = "hello"
score = 0

x = 0
# while loop to allow two attempts at the Question
while x != 2:
    print("LOADING...")
    time.sleep(1)
    # 把输入放到循环内,每次尝试都让用户重新输入
    ans2 = input("Enter the name of the song: ")
    # 统一转为小写,避免大小写影响判断
    ans2 = ans2.lower()
    time.sleep(0.5)
    
    # 判断答案是否正确
    if ans2 == song:
        if x == 0:
            print("You gained 3 points for guessing it first time!")
            score += 3
        else:
            print("\nYou gained 1 point for guessing it the second time!")
            score += 1
        # 答对后直接终止循环,不需要继续尝试
        x = 2  # 也可以用break语句跳出循环
        time.sleep(0.5)
    else:
        print("\nIncorrect! No points gained")
        x += 1
        time.sleep(0.5)

# 可选:输出最终得分,方便测试
print(f"Final score: {score}")

逻辑说明

  1. 输入移到循环内:每次进入循环时,用户都会被要求输入歌曲名,第一次答错后,第二次能重新输入新的答案。
  2. 答对后终止循环:当用户猜对时,通过x = 2让循环条件x != 2不成立,直接结束猜测流程;用break语句也能达到同样的效果。
  3. 优化条件判断:把两个独立的if合并成if-else,逻辑更清晰,避免冗余的重复判断。

现在测试的话,不管第一次答对还是答错,流程都会正常执行最多两次尝试(答对后会提前结束),不会再出现无限循环或无输出的问题啦。

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

火山引擎 最新活动