Python开发命令机器人时cmds变量无法返回、程序空白崩溃问题
问题根因
你的代码存在4个直接导致崩溃、无输出、逻辑失效的问题:
- 函数传参不匹配:
slap函数定义时要求传入cmds参数,但内部递归调用slap()时未传入任何参数,会直接触发参数缺失报错导致程序崩溃;内部嵌套的con_p函数定义要求传入cmds、con两个参数,调用con_p()时同样未传参,也会触发报错。 - 输入读取逻辑错误:
cmds变量仅在程序启动时读取一次,用户在交互环节输入n后,con_p的返回值没有被任何变量接收,程序会直接进入后续的死循环——该循环仅判断cmds == "br"才会退出,但此时cmds还是最初输入的./slap,永远无法满足退出条件,程序会无限空转,表现为终端空白无输出。 - 冗余无效代码:
g、g1两个变量存储的是print()函数的返回值(固定为None),没有任何实际作用;question()函数定义后从未被调用,对应逻辑永远不会执行。 - 命令判断逻辑位置错误:所有命令的分支判断都写在主循环外,仅会在程序启动时执行一次,后续用户输入的新命令完全不会被处理。
修复后可运行代码
import time # 初始化欢迎流程 print("Hi User! Pick a name for me!") time.sleep(1) name = input("Name for Bot: ") print("Ooh", name + "!", "thats a cool name!") print("What should I call you?") time.sleep(1) user_name = input("Your name: ") print(user_name + "...", "cool name!") time.sleep(1) # 命令功能实现 def slap(): while True: slap_p = input("Who do you want to slap: ") caption_for_slap = input("Caption for slapping: ") print("Loading...") time.sleep(3) print(caption_for_slap, "👊👊👊👊👊👊", ". You deserved it", slap_p) con = input("Would you like to continue y/n - ") if con == "n": return def about_rb(): print("I am a robot named", name + ".", "Thanks to", user_name, "for picking that name for me!") time.sleep(1) print("My age is 35 :)") def answer_question(cmd): if cmd == "do you like Siri or Cortana": print("I love all robots! I dont really have a preference for both ♥") # 主命令交互循环 while True: current_cmd = input("Say any command you would like :) - ") if current_cmd == "br": break elif current_cmd == "./slap": slap() elif current_cmd == "./about_rb": about_rb() else: answer_question(current_cmd)
修复说明
- 移除了无意义的嵌套
con_p函数,将slap功能的继续/退出逻辑直接整合到slap内部循环中,彻底解决参数不匹配的报错问题 - 将命令输入读取逻辑移到主交互循环内,每次执行完功能后都会重新等待用户输入,不会出现执行一次命令就卡死空转的问题
- 清理了所有冗余无效变量和未调用的函数,补全了问答功能的调用逻辑
- 所有命令判断逻辑都放在主循环内,用户任意时刻输入的命令都能被正常响应
内容的提问来源于stack exchange,提问作者Shrehan
相关产品推荐
相关产品推荐

