【问题标题】:Cursor moving off line Turtle光标移动离线 Turtle
【发布时间】:2021-04-13 19:44:33
【问题描述】:

我目前正在使用 Turtle 模块在 Python 中完成一项编程任务,我有以下代码:

from turtle import *
number_of_shapes = 4
for shape in range(1, number_of_shapes + 1):
    size = shape * 20
    for sides in range(4):
        forward(size + 10)
        right(90)
penup()
forward(size + 10)
left(90)
forward(size + 30)
right(90)
pendown()

这会产生以下输出:

但是,我想让乌龟停在这里:

我已尝试更改所有数字,但似乎找不到与海龟相关的值,有人可以帮忙吗?

【问题讨论】:

标签: python python-3.x turtle-graphics python-turtle


【解决方案1】:

让我们尝试不同的方法来获得一些乐趣。这将绘制相同的图形并将海龟留在您想要的位置。但是,它将最小化海龟的运动(不会在同一条线上重绘),代价是稍微多一些代码,并且在绘图时永远不会将笔从纸上抬起:

from turtle import *

NUMBER_OF_SHAPES = 4

angle = 90
magnitude = -1
shape = NUMBER_OF_SHAPES

for _ in range(2):
    right(angle)
    forward(shape * 20 + 10)

    for _ in range(NUMBER_OF_SHAPES - 1):
        right(angle)
        forward((2 * shape + magnitude + 1) * 20)

        shape += magnitude
        angle = -angle

    magnitude = -magnitude

    right(angle)
    forward(shape * 20 + 10)

done()

我们的想法是,与其将其视为一组多个正方形,不如将其视为/实现为两条不同大小的锯齿形线,在它们的末端相遇。

一个循环可以产生相同的输出吗?

一种方法是放弃绘图并通过将海龟本身变成正方形来切换到冲压。这将消除用于绘制正方形的循环,并且只需要一个循环来调整、标记和移动正方形:

from turtle import *

NUMBER_OF_SHAPES = 4
CURSOR_SIZE = 20

shape('square')
fillcolor('white')
penup()

for n in range(1, NUMBER_OF_SHAPES + 1):
    size = n * 20 + 10
    goto(xcor() + size/2, ycor() + size/2)
    shapesize(size / CURSOR_SIZE)
    stamp()
    goto(xcor() + size/2, ycor() + size/2)

shapesize(1)
shape('classic')
fillcolor('black')
done()

这会产生相同的可见结果,但通过完全不同的方式产生自己的规则和约束:

【讨论】:

  • 一个循环可以产生相同的输出吗?
  • @APStevens,您和我的示例都使用两个循环来绘制图形。我在我的答案中添加了另一种方法,通过冲压在一个循环中绘制图形。
【解决方案2】:

你刚刚搞砸了最后一部分是怎么做的:

from turtle import *
number_of_shapes = 4
a=5
for shape in range(1, number_of_shapes+1):
    size = shape * 20
    for sides in range(a):
        forward(size + 10)
        right(90)
    right(180)
    a=6

如果你需要什么就问吧:)

【讨论】:

  • 您的解决方案确实有效,但它改变了输出,我需要输出保持不变。只有海龟的位置需要改变。
  • 我更改了一些代码,现在它可以工作了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多