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

时间:2021-05-18 06:42:03

标签: python while-loop

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

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

命令 = "quit" 应该呈现 while 条件 False 并因此跳过以仅执行外部 else 语句。为什么即使不满足while条件,它仍然执行两个else语句?

7 个答案:

答案 0 :(得分:1)

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")

被执行,因此你的输出变成

I don't understand that
Game exited

答案 1 :(得分:1)

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")

看看你的代码,你得到输入“quit”,然后它归结为第一个 if(not true)->next elif(not true)->next else(true)->print("carstopped") ->next while(not true)->完成循环并转到“我不明白”

像这样更改代码:

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")

答案 2 :(得分:0)

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

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

典型的解决方法是使用

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

您正在循环内输入。因此,它将执行循环,然后检查条件是否满足,即 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")