打破 python 海龟中的嵌套循环
Breaking out of nested loop in python turtle
我想要两个 'items' 使用这个循环同时移动:
import turtle as t
from turtle import *
import random as r
t1=Turtle()
t2=Turtle()
turtles=[t1,t2]
for item in turtles:
item.right(r.randint(5,500))
c=0
for i in range(500):
for item in turtles:
item.forward(2)
c=c+1
if c==1:
yc=item.ycor()
xc=item.xcor()
if c==2:
c=0
yc2=item.ycor()
xc2=item.xcor()
if yc-yc2<5 or xc-xc2<5:
break #here is my problem
#rest of code
如果对象在同一 x
或 y
行上直到最接近的 5,我想使用 break
行退出我的程序,但不是对象之一冻结,另一个继续运行,直到循环结束。我怎样才能让我的程序退出那个循环?
你的 break
语句没有按你想要的方式工作,因为它是一个嵌套循环。
你应该使用例外:
try:
for i in range(500):
for item in turtles:
...
if yc - yc2 < 5 or xc - xc2 < 5:
raise ValueError
except ValueError:
pass
但是,您必须注意不要忽略任何您实际上应该捕获的意外错误!
考虑将您的代码放入函数中以避免所有这些麻烦:
def move_turtles(turtles):
for i in range(500):
for item in turtles:
...
if yc - yc2 < 5 or xc - xc2 < 5:
return
move_turtles(turtles)
# rest of code
这被称为打破嵌套循环。
这是众多解决方案中的一种。
stop = False
for j in i:
if stop:
break
#Do stuff
for k in j:
#Do more stuff
if (condition):
stop = True
break #breaks (for k in j) loop
我想要两个 'items' 使用这个循环同时移动:
import turtle as t
from turtle import *
import random as r
t1=Turtle()
t2=Turtle()
turtles=[t1,t2]
for item in turtles:
item.right(r.randint(5,500))
c=0
for i in range(500):
for item in turtles:
item.forward(2)
c=c+1
if c==1:
yc=item.ycor()
xc=item.xcor()
if c==2:
c=0
yc2=item.ycor()
xc2=item.xcor()
if yc-yc2<5 or xc-xc2<5:
break #here is my problem
#rest of code
如果对象在同一 x
或 y
行上直到最接近的 5,我想使用 break
行退出我的程序,但不是对象之一冻结,另一个继续运行,直到循环结束。我怎样才能让我的程序退出那个循环?
你的 break
语句没有按你想要的方式工作,因为它是一个嵌套循环。
你应该使用例外:
try:
for i in range(500):
for item in turtles:
...
if yc - yc2 < 5 or xc - xc2 < 5:
raise ValueError
except ValueError:
pass
但是,您必须注意不要忽略任何您实际上应该捕获的意外错误!
考虑将您的代码放入函数中以避免所有这些麻烦:
def move_turtles(turtles):
for i in range(500):
for item in turtles:
...
if yc - yc2 < 5 or xc - xc2 < 5:
return
move_turtles(turtles)
# rest of code
这被称为打破嵌套循环。 这是众多解决方案中的一种。
stop = False
for j in i:
if stop:
break
#Do stuff
for k in j:
#Do more stuff
if (condition):
stop = True
break #breaks (for k in j) loop