(我的程序完整代码是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 中。
我做错了什么?
答案 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:
。
但是要小心无休止的循环。它们被认为是非常糟糕的做法,因为如果您的程序内部没有中断逻辑,您的程序将无法再正常退出。