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

Python命令行交互游戏输入无响应、程序异常退出问题咨询

问题现象

开发指令交互类游戏时出现故障:用户输入内容后程序无响应,甚至直接异常退出。
已知程序主逻辑外层设置了while循环,循环内执行cmd = input(">>> ")语句获取用户输入,故障相关代码片段如下:

# paths
    def path1():
        coins = 0
        gem = 0
        print("Welcome to, community manager.")
        print("Type start")
        if cmd == "start":
            print(f'''Welcome {user} I will give you 10 coins to start with.
            you can always type balance to check your coins
            ''')
            sleep(1.5)
            coins = coins + 10
故障根因
  • 变量作用域不合法:path1()函数内部未定义cmd、user变量,也未接收外层传入的对应值,函数运行到这两个变量的调用位置时会直接抛出NameError,导致程序异常退出
  • 逻辑时序错误:函数打印"Type start"提示后,没有预留输入等待逻辑,直接使用外层循环传入的单次cmd值做判断,只要进入函数时的输入不是start,判断分支会直接跳过,无任何输出,表现为程序无响应
  • 状态存储逻辑错误:coins、gem为path1()内部局部变量,每次调用函数都会被重置为0,即使用户触发了加10金币的逻辑,下次调用函数时数值也会清零,不符合游戏状态持久化的预期
  • 依赖缺失风险:代码中调用了sleep()方法,若文件头部未导入time模块对应方法,运行到该行会直接抛出NameError导致退出
修复方案
  1. 调整函数传参逻辑,将主循环获取的cmd、存储的用户名user作为参数传入path1(),解决变量找不到的问题
  2. 将coins、gem这类需要持久化的游戏状态移到函数外部存储,避免每次调用函数重置数值
  3. 调整函数内交互逻辑,输出操作提示后增加输入等待、非法输入校验逻辑,不要直接复用外层单次输入做全流程判断
  4. 确认文件头部导入sleep()依赖

参考修复代码:

# 导入sleep依赖
from time import sleep

# 全局游戏状态初始化,放在主循环外避免重复重置
coins = 0
gem = 0
# 替换为实际获取到的用户名
user = "player"

def path1(user):
    global coins, gem
    print("Welcome to, community manager.")
    print("Type start")
    # 路径内交互循环,等待用户输入合法指令
    while True:
        path_cmd = input(">>> ").strip()
        if path_cmd == "start":
            print(f'''Welcome {user} I will give you 10 coins to start with.
you can always type balance to check your coins
            ''')
            sleep(1.5)
            coins += 10
            # 路径后续逻辑可往下追加
            break
        else:
            print("Invalid input, please type 'start' to continue.")

# 主循环
if __name__ == "__main__":
    while True:
        cmd = input(">>> ").strip()
        # 路径跳转判断
        if cmd == "path1":
            path1(user)
        # 余额查询逻辑
        elif cmd == "balance":
            print(f"Coins: {coins}\nGems: {gem}")
        # 退出逻辑
        elif cmd == "exit":
            print("Game exited.")
            break
        else:
            print("Unknown command, please try again.")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:12:13