【问题标题】:Python execute While loop even if condition is not met?即使条件不满足,Python也会执行While循环?
【发布时间】:2021-08-07 09:25:03
【问题描述】:

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

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语句?

【问题讨论】:

  • 您的解释是错误的。你进入循环,你要求用户输入,你检查它是否与某个值。 Quit 命中 else 块然后它再次循环 et 退出循环并命中 while else。你的程序完全按照你的要求去做。
  • 另请阅读while .. else 结构。它不是你想的那样。在这种情况下,您不需要第二个 else,因为在 while 循环中没有任何 break 语句。
  • 哦,我知道我哪里出错了。我假设 while 条件是在整个 while 块中“带来”的,所以我错误地将内部 else 语句条件解释为:command != "start" and command != "stop" and command != "quit"。那么准确地说,Python 的逻辑是一行一行的流动?
  • 在您的条件逻辑上添加一个中断,它将控制超出循环

标签: python while-loop


【解决方案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

【讨论】:

    【解决方案2】:
    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)->完成循环并转到“我不明白”

    像这样更改代码:

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

    【讨论】:

    • 为了澄清,你提到:first if(not true)->next elif(not true)->next else(true)->print("car stops")->next while(not true)->完成循环并转到“我不明白 *********应该是: first if(not true)->next elif(not true)->next else(true)->print("我不明白")->next while(不正确)->完成循环并转到“游戏退出
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          因为命令字符串是在while条件之后赋值的,所以while条件只在while循环内的else语句之后才收到字符串'quit',打印出I don't understand that。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2020-04-15
              • 2016-03-14
              • 1970-01-01
              • 1970-01-01
              • 2013-04-08
              • 2020-12-24
              • 1970-01-01
              • 1970-01-01
              • 2023-03-11
              相关资源
              最近更新 更多