【问题标题】:Drawing a spiral in a spiral using Python turtle使用 Python turtle 在螺旋中绘制螺旋
【发布时间】:2023-03-28 15:31:01
【问题描述】:

我的海龟安吉代码有什么问题?我想让她在布拉德的方圈内盘旋。

我的代码:

import turtle

def draw_square(some_turtle):

    for i in range (1,5):
        some_turtle.forward(200)
        some_turtle.right(90)

def draw_art():
    window = turtle.Screen()
    window.bgcolor("black")
    #Turtle Brad
    brad = turtle.Turtle()
    brad.shape("turtle")
    brad.color("yellow")
    brad.speed(6)
    brad.pensize(2)
    for i in range(1,37):
        draw_square(brad)
        brad.right(10)
    #Turtle Angie
    angie = turtle.Screen()
    angie.shape("turtle")
    angie.color("blue")
    angie.speed(5)
    angie.pensize(2)
    size=1
    while (True):
        angie.forward(size)
        angie.right(91)
        size = size + 1

    window.exitonclick()

draw_art()

这是我想要的样子的照片。我希望显示布拉德的外部,然后显示内部的圆圈以包括螺旋。它应该看起来像附加的螺旋图像。谢谢!

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    除了angie = turtle.Turtle()(不是turtle.Screen())之外,您可能会注意到的另一个问题是您的windowexitonclick() 语句将无效。那就是点击窗口不会退出并关闭窗口,因为它是在无限 while True: 循环之后发生的:

    while (True):
            angie.forward(size)
            angie.right(91)
            size = size + 1
    
    window.exitonclick()
    

    所以永远也达不到。解决此问题的最简单方法是,在不增加计时器复杂性的情况下,将其设为 for 循环,其范围与您在其他地方使用的范围相同,以便 angie 最终停止并让下一行代码执行。

    最后,它看起来不像你的目标,因为brad 在他的正方形上画了五个边而不是四个。一旦我们修复它,它看起来是正确的,angie 从中间而不是边缘开始。

    使用上述和其他样式更改对您的代码进行返工:

    from turtle import Turtle, Screen
    
    def draw_square(some_turtle):
    
        for _ in range(4):
            some_turtle.forward(200)
            some_turtle.right(90)
    
    def draw_art():
    
        # Turtle Brad
        brad = Turtle(shape="turtle")
        brad.color("yellow")
        brad.pensize(2)
        brad.speed("normal")  # 6/normal is the default so don't need to do it
    
        for _ in range(36):
            draw_square(brad)
            brad.right(10)
    
        # Turtle Angie
        angie = Turtle(shape="turtle")
        angie.color("blue")
        angie.pensize(2)
        angie.speed(5)  # slightly slower than brad
    
        size = 1
    
        for _ in range(300):
            angie.forward(size)
            angie.right(91)
            size += 1
    
    window = Screen()
    window.bgcolor("black")
    
    draw_art()
    
    window.exitonclick()
    

    一旦angie 完成她的设计,您应该只需单击窗口即可使其消失。对于这样的复杂设计,我很想将turtle.speed() 设置为“快速”和“最快”,因为我没有耐心。 (不要使用“最快”、“快”、“正常”、“慢”和“最慢”来代替数字,以避免意外,除非您需要非常精细地控制速度。)

    【讨论】:

    • 谢谢!你解释得很好。这真的很有帮助。 :) 绘制完成后如何让乌龟形状消失?
    • @digi_life,您可以使用brad.hideturtle()(对于 angie 也是如此)使乌龟本身在完成绘制后消失。 (有些程序会在海龟绘制之前执行此操作,以避免显示海龟在工作。)
    【解决方案2】:

    这一行是错误的:

    angie = turtle.Screen()
    

    应该是:

    angie = turtle.Turtle()
    

    【讨论】:

    • 不正确。从文件运行时,您实际上需要两者。 turtle.Turtle() 创建新的海龟对象,而turtle.Screen() 打开海龟对象绘制的屏幕。
    • 如果你使用的是在线IDE,你不需要屏幕,只需要init。
    • @Foster Op 正在使用 IDLE。
    【解决方案3】:

    angieTurtle 而不是 Screen

    将第 22 行更改为 angie = turtle.Turtle()

    【讨论】:

      【解决方案4】:

      enter image description here

      从龟进口龟,屏幕

      def draw_square(some_turtle):

      for _ in range(4):
          some_turtle.forward(290)
          some_turtle.right(90)
      

      def draw_art():

      # Turtle Brad
      brad = Turtle(shape="turtle")
      brad.color("cyan")
      brad.pensize(2)
      brad.speed("fast")  # 6/normal is the default so don't need to do it
      
      for _ in range(36):
          draw_square(brad)
          brad.right(10)
      
      # Turtle Angie
      angie = Turtle(shape="turtle")
      angie.color("darkcyan")
      angie.pensize(2)
      angie.speed(0)  # slightly slower than brad
      
      size = 1
      
      for _ in range(250):
          angie.forward(size)
          angie.right(91)
          size += 0
      

      窗口 = 屏幕() window.bgcolor("黑色")

      draw_art()

      window.exitonclick()

      【讨论】:

        【解决方案5】:
        #made by jonny big smokes©™®❤ this code  is illegal to use without permission of the king of gypos jonny big smokes
        import turtle
        import random
        colorlistsize = 3
        wn = turtle.Screen()
        wn.bgcolor("black")
        tess = turtle.Turtle()
        
        def random_color():
            levels = range(32,256,32)
            return list(random.choice(levels) for _ in range(3))
        
        
        def color_selector():
          listo = []
          for i in range(colorlistsize):
            listo.append(random_color())
          return listo
        
        
        while True:
          tess.speed(-1000)
          sz = 2 
          ang = random.randint(58, 302)
          color_list = color_selector()
          for i in range(500):
            tess.right(ang)
            tess.forward(sz)
            color = color_list [i % 3]
            tess.color(color)
        
            sz = sz+1
          tess.clear()
          tess.reset()
        

        【讨论】:

        • 您能否编辑并添加关于您的代码如何解决问题的简短说明?
        • 此代码无法在当前的 Python 3 和 turtle.py 下运行,因为它假定了错误的默认颜色模式。在顶部附近添加 turtle.colormode(255) 以使其运行,这样您就可以看到它与 OP 的问题无关。
        • 您在顶部的版权声明没有任何作用。您agreed,您在此处发布的所有内容都是 Stack Exchange 的财产。
        【解决方案6】:

        更简单的应该是这样的:

        import turtle
        
        t = turtle.Turtle()
        t.speed(0)
        def kuadrado(lado): 
          for i in range(36): #draw the circle of squares
           t.forward(lado)
           t.right(90)
           t.forward(lado)
           t.right(90)
           t.forward(lado)
           t.right(90)
           t.forward(lado)
           t.right(100)
          for i in range(100): #draw the spiral inside the circle of squares
           t.forward(i)
           t.right(80)   
        
        kuadrado(50)
        
        input("<enter>")
        

        你只需要调整螺旋的措施来获得和谐

        【讨论】:

          猜你喜欢
          • 2016-05-20
          • 1970-01-01
          • 2021-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-20
          相关资源
          最近更新 更多