为什么我的 while 循环在满足条件然后运行时不注册?

时间:2020-12-20 18:00:58

标签: python function while-loop

(我的程序完整代码是here。我还是初学者,所以不要判断)

我想要一个 while 循环,当我调用 posSet 的集合中没有数字 0 时,我会注册一个循环,然后它将汽车对象设置到该位置。

while 0 not in posSet:
    for car in allCars:
        if not car.inUse:
            car.resetPos()
            break

但是,当我执行 car.move() 我的第一辆车 (c1) posSet 时,现在只包含 1 - 即 0 不在 posSet 中,没有汽车产卵。

但是,如果我主动在 shell 中输入 while 0 not in posSet: 等,c2 就会生成。:

但我不想在每次 0 为空时都重新运行 while 循环。 当 0 不在 posSet 中时,我的循环不应该运行吗?

另一件需要注意的事情 - 它在开始时起作用,当 posSet 中没有任何内容时,并生成 c1。但在那之后,它会中断循环,并且似乎永远不会再回到它上面,即使 0 不在 posSet 中。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这就是命令式编程语言(python 的类型)的工作原理。

您的代码从头到尾执行。所以它进入while循环,在条件为真时留在里面。但只要条件为假,循环就会退出,程序将继续执行下面的代码。

由于您的循环位于脚本的底部,因此程序将正常退出。

如果您想要一个永不停止的循环,您必须将程序的某些部分包装在一个永无止境的循环中:

# definitions here
class Car:
    pass


# loop starts
while True:  # endless loop
    if something():
        do_something()
    also_do()
   
    if game_end_reached():
        break    # exit the loop

这样你的程序永远不会退出循环。 在里面你可以检查是否例如if 0 not in posSet:

但是要小心无休止的循环。它们被认为是非常糟糕的做法,因为如果您的程序内部没有中断逻辑,您的程序将无法再正常退出。