【问题标题】:python use turtle draw a track n field race trackpython使用turtle绘制田径赛道
【发布时间】:2014-06-20 20:33:55
【问题描述】:

使用海龟编写一个程序,绘制一条带有多条车道的轨道。您可以要求用户输入 1 到 8 之间的整数作为车道数。一条轨道通常由 2 个直道组成,两侧各有半圆。在这些形状中的两个之间有一条车道。因此,一条有 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()

【问题讨论】:

  • side = side = side + 20 看起来不对
  • 是的,type-o 甚至没有感谢,但仍然画错了!
  • 我并没有完全将任务想象成手(看不到轨道应该如何显示),我不知道turtle,但似乎你必须使用@987654325 @将每条车道的起始位置偏移某物的宽度(这是我不理解任务的地方)
  • @RobertEkendahl sportspectator.com/fancentral/track/guide04.html 是我想画的。

标签: python-3.x turtle-graphics


【解决方案1】:

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

  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)
    

只是为了清楚,这就是它最终的样子:

进口乌龟

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 条车道中间:

更多重构代码:

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()

【讨论】:

  • 感谢第 1 点和第 2 点。当我使用第 3 点时,它会将相交线从底部 1 更改为顶部 1。尝试调整角度但无济于事。
  • @user3723557:您是说要反转绘图方向吗?向内而不是向外绘制?
  • 不,即使使用 race.penup 代码,一条线仍然相交。无论是向内还是向外绘制都没有关系。
  • 进一步更新:添加backwards(10),防止不平衡。
  • 我非常感谢你!这行得通!
猜你喜欢
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 2021-05-17
  • 1970-01-01
  • 2018-03-23
  • 2014-08-29
相关资源
最近更新 更多