Python中while循环输入quit时同时触发两个else分支的原因是什么
问题原因
while循环的条件判断仅在每一轮循环开始前执行,不会在循环体内变量更新后立刻触发校验,你的代码执行流程如下:
- 初始
command为空字符串,第一次判断command != "quit"结果为真,进入循环体 - 执行
command = input("Command: ")获取输入,若此时你输入了quit,command被赋值为quit,但已经处于循环体内部,会继续执行后续代码 - 后续的if分支判断中,
quit既不匹配start也不匹配stop,所以触发if的else分支,输出I don't understand that - 本轮循环体执行完毕,回到while的条件判断位,此时才检测到
command == "quit",条件不成立退出循环,触发while对应的else分支,输出Game exited
修复方案
你可以调整循环内的判断顺序,获取输入后优先判断是否为退出命令:
command = "" while command != "quit": command = input("Command: ") if command == "quit": break elif command == "start": print("Car ready to go") elif command == "stop": print("Car stopped") else: print("I don't understand that") else: print("Game exited")
如果使用Python3.8及以上版本,也可以用海象运算符把输入逻辑放到while条件中,从根源上避免输入quit后进入循环体:
while (command := input("Command: ")) != "quit": if command == "start": print("Car ready to go") elif command == "stop": print("Car stopped") else: print("I don't understand that") else: print("Game exited")
内容的提问来源于stack exchange,提问作者toothpick
相关产品推荐
相关产品推荐

