无限次返回一个字符串

Returning a String Endless Times

command = input("> ")
started = False

while True:
if command == "start":
  if started:
   print("car has already started") 
  else: 
      started = True
      print("car started")
elif command == "stop":
    if not started:
        print("car has already stopped")
    else:
        started = False
        print("car is stopped")
elif command == "quit":
    break

当我说“开始”时,它会无限时间渲染“汽车已经启动”,其他输入也是如此。我该如何抑制这个?如果能用初学者的语言解释一下会很有帮助,谢谢!!

每次while循环都需要输入新的命令,否则会陷入死循环,第一次输入的命令条件相同

代码:

started = False
while True:
    command = input("> ")
    if command == "start":
        if started:
            print("car has already started") 
        else: 
            started = True
            print("car started")
    elif command == "stop":
        if not started:
            print("car has already stopped")
        else:
            started = False
            print("car is stopped")
    elif command == "quit":
        break

结果:

> start
car started
> stop
car is stopped
> stop
car has already stopped
> start
car started
> start
car has already started
> quit

你的循环中发生的事情是:

  1. while True - while 循环将始终 运行 直到此语句为 False,因为 True 永远不会为 False,这将永远循环直到 break 命令为 运行.
  2. if command == "start" - 因为 command 是在 while 循环之外设置的,所以它总是等于 start 并且这个 if 语句总是 运行
  3. 第一个 运行,它会打印“car started”,之后的每个循环都会打印“car has already started”。

要停止这种情况,您需要更改 command 的值以更改每次循环时的行为。为此,您可以在循环开始时获取输入:

started = False

while True:
    command = input("> ") # Input inside the loop
    if command == "start":
      if started:
       print("car has already started") 
      else: 
          started = True
          print("car started")
    elif command == "stop":
        if not started:
            print("car has already stopped")
        else:
            started = False
            print("car is stopped")
    elif command == "quit":
        break

您永远不会更改命令的值并且循环是 运行“while True”,因此它永远不会停止。

当用户输入“开始”时,您的脚本会将字符串“开始”分配给命令。

这是无限循环,因为第一个 if 语句正在检查变量 command 的值,在输入之后它将始终为“start”。

您可以通过多种方式解决。 一种是改变if语句后的变量名:

命令=输入(“>”) 开始=假

while True:
    if command == "start":
        if started:
            print("car has already started")
            command = ""

另一种方法是在每个 if 比较之后添加 break 命令。

您也可以将 while True 更改为 while not started。循环将继续,直到您将变量 started 更改为 True,您已经在每个条件块之后执行此操作。

您需要将命令放在 while 循环中,以便循环停止,直到用户输入他想要的命令:

started = False
while True:
    command = input("> ")
    if command == "start":
        ...

男性一定要将输入添加到 while 循环中。在你的例子中,它只是接受一个输入,然后 command 的值是固定的。所以,这是一个无限循环。

但是当你更改位置并将其保留在循环中时,每次它要求输入时,command 的值都会改变。

此外,.lower() 会将输入转换为小写以消除不区分大小写的情况

started = False

while True:
    command=input('>> ').lower()
    if command == "start":
        if started:
            print("car has already started") 
        else: 
            started = True
            print("car started")
    elif command == "stop":
        if not started:
            print("car has already stopped")
        else:
            started = False
            print("car is stopped")
    elif command == "quit":
        break