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

如何在if/else语句的else分支中使用while循环重复代码?

问题原因

你当前代码的核心问题是在else分支的while循环里先调用了main(),这会导致递归进入新的main函数执行流程,原来的while循环被挂起。只有当新的main执行完成后,才会回到原来的循环执行retry = input(...),但如果新的main又触发了else分支,就会再次递归,永远轮不到执行输入重试的代码。

修复方案

调整逻辑,把「询问重试」放在「重新启动游戏」之前,同时避免不合理的递归调用,以下是两种可行的修复方式:

方式1:外层循环控制整体流程

把游戏启动逻辑放到外层循环里,从根源避免递归问题:

def main():
    # 你的游戏主逻辑,示例如下:
    choice = input("Choose left or right? ")
    if choice == "left":
        print("You win!")
        return  # 正常通关,退出当前main函数
    else:
        print("You fall into a hole! Game Over!")

# 外层循环控制重试
while True:
    main()
    retry = input("Do you want to try again? ")
    # 兼容大小写输入,比如"Yes"、"NO"都能识别
    if retry.lower() == "no":
        break

方式2:修改原else分支逻辑

如果一定要在else分支内处理重试,调整代码顺序并优化递归逻辑:

def main():
    # 游戏主逻辑
    choice = input("Choose left or right? ")
    if choice == "left":
        print("You win!")
    else:
        print("You fall into a hole! Game Over!")
        while True:
            retry = input("Do you want to try again? ")
            if retry.lower() == "no":
                exit()  # 用户选择不重试,直接退出程序
            elif retry.lower() == "yes":
                main()  # 用户确认后再调用main,避免无意义递归
                break  # 启动新游戏后,退出当前重试循环
关键注意点
  • 不要在未获取用户重试指令前就递归调用main(),否则会导致当前循环代码被无限挂起
  • 使用retry.lower()可以兼容用户输入不同大小写的情况,提升交互容错性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:17