python使用乌龟绘制田径赛道

时间:2014-06-20 20:33:55

标签: python-3.x turtle-graphics

使用绘制具有多个通道的轨道的乌龟编写程序。您可以要求用户输入1到8之间的整数来表示通道数。轨道通常由2个Straightaways组成,两侧都有半圆。在这些形状中的两个之间封闭了一条通道。因此,具有6个车道的轨道应具有7个相似形状的图形,彼此封闭。

上述问题是我试图产生的结果。每一条轨道都在同一条线上开始。请帮忙!我应该尝试改变起始位置吗?

import turtle

def main():
    side = 80
    n = int(input("How many lanes do would you want?\n"))


    turtle.pendown()
    for cnt in range(n+1):
        race = turtle.Turtle()
        race.forward(side)
        race.circle(side/2,180)
        race.forward(side)
        race.circle(side/2,180)
        side = side = side + 20

main()

1 个答案:

答案 0 :(得分:0)

需要注意的一些重要事项:

  1. turtle.pendown()不会更改特定实例或race,您需要race.pendown()

  2. 每次执行race = turtle.Turtle()时,都会创建race的新实例。将此语句放在for循环的一侧。

  3. 您需要移动的每个循环race(用于轨道间距),您可以执行此操作:

    race.penup() #Inside for loop.
    race.right(90)
    race.forward(20) #I think it should be 20...
    race.right(-90)
    
  4. 要明确这是最终的样子:

    导入乌龟

    def main():
        side = 80
        n = int(input("How many lanes do would you want?\n"))
    
        race = turtle.Turtle()
        for cnt in range(n+1):
            race.forward(side)
            race.circle(side,180)
            race.forward(side)
            race.circle(side,180)
            side = side = side + 20
            race.penup() #Inside for loop.
            race.right(90)
            race.forward(20) #I think it should be 20...
            race.right(-90)
            race.backward(10)
            race.pendown()
    
    main()
    

    同时,在3车道中间:

    Turtle

    更加重构的代码:

    import turtle
    
    def create_track(n, side=80, change=20):
        race = turtle.Turtle()
        for cnt in range(n+1):
            race.forward(side)
            race.circle(side,180)
            race.forward(side)
            race.circle(side,180)
            side = side + change
            race.penup()
            race.right(90)
            race.forward(change)
            race.right(-90)
            race.backward(change/2)
            race.pendown()
    
    def main():
        n = int(input("How many lanes do would you want?\n"))
        create_track(n)
    
    
    if __name__ == "__main__":
        main()