代码之家  ›  专栏  ›  技术社区  ›  Aliaksandr S.

python turtle中嵌套循环的突破

  •  1
  • Aliaksandr S.  · 技术社区  · 6 年前

    我希望使用此循环同时移动两个“项目”:

    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
    

    我想使用退出我的程序 break 如果对象位于同一直线上 x y 排到最接近的5,但取而代之的是,一个对象冻结,另一个对象继续运行,直到循环结束。如何使程序退出该循环?

    2 回复  |  直到 6 年前
        1
  •  3
  •   nisemonoxide    6 年前

    你的 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
    
        2
  •  2
  •   Javier Lim    6 年前

    这被称为 打破嵌套循环。 这是众多解决方案中的一个。

    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