繁体   English   中英

Python 即使条件不满足也执行While循环?

[英]Python execute While loop even if condition is not met?

我正在创建一个汽车游戏。 只有“开始”、“停止”、“退出”命令。 无法识别任何其他命令。

command = ""

while command != "quit":
    command = input("Command: ")
    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")

除“退出”外,所有命令都可以正常工作。 使用 while 循环,它会导致执行 else 语句并打印:

I don't understand that
Game exited

command = "quit" 应该使 while 条件为False ,从而向前跳过以仅执行外部 else 语句。 为什么即使不满足 while 条件,它也会执行两个 else 语句?

while-else的工作方式如下:如果不满足while条件,则执行else
所以,当你在程序中输入“quit”,那么if command == "start":elif command == "stop":条件都不满足。
因此,执行了else ,打印I don't understand that

现在,再次检查while循环的条件: command != "quit"
但是,这个条件是False ,因为command的值现在是"quit"

所以,

else:
    print("Game exited")

被执行,因此您的 output 变为

I don't understand that
Game exited
while command != "quit":
    command = input("Command: ")
    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")

查看您的代码,您得到输入“退出”,然后它归结为第一个 if(not true)->next elif(not true)->next else(true)->print("car stopped")->next while(not true)->finish loop 和 go 到“我不明白”

像这样更改代码:

while command != "quit":
    command = input("Command: ")
    if command == "start":
        print("Car ready to go")
    elif command == "stop":
        print("Car stopped")
    elif command != "quit":
        print("I don't understand that")
else:
    print("Game exited")

Python 程序逐行运行。 while 循环不保证其在整个缩进块中的条件。 所以不等于“只要不满足[条件],就跳出while块”

您的input()在 while 循环内。 所以它会先执行到while循环结束,直到到达while循环的顶部,再次检查while循环的条件。

一个典型的解决方法是有一个

while True:
    command = input("Command: ")
    if command == "quit":
        break
    ...

您在循环顶部获得输入,因此它在检查循环条件之前完成了完整的循环迭代。

while command != "quit":
    command = input("Command: ")
    ...

一种选择是将输入提取移动到循环的末尾,以便循环条件是下一个要检查的事情。 您还可以通过在使用break获取输入后检查 quit 来提前跳出循环。

正如 Thomas 所解释的,如果您真的想打印外部语句,只需删除 else 部分,它会在给出命令“quit”时打印外部部分。

因为命令字符串是在 while 条件之后分配的,所以 while 条件仅在 while 循环内的 else 语句之后接收字符串 'quit',这打印出我不明白。

您正在循环内输入。 因此,它将执行循环,然后检查条件是否满足即command != quit

您可以尝试使用此代码。

command = ""

while command != "quit":
    command = input("Command: ")
    if command == "start":
        print("Car ready to go")
    elif command == "stop":
        print("Car stopped")
    elif command != "quit":
        print("I don't understand that")
else:
    print("Game exited")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM