【问题标题】:4 triangles to be aligned vertically4个三角形垂直对齐
【发布时间】:2021-12-21 23:07:00
【问题描述】:
所以我正在开发一个程序,我希望输出有 4 个长度为 20、40、60、80 的三角形垂直放置,每个三角形的顶部应该正好是上面三角形基线的一半。
我已经设法让前两个三角形正确,但不能让前两个按照我想要的方式对齐。我知道我在某个地方出错了,但我似乎看不到它
from turtle import *
NUMBER_OF_SHAPES = 4
for shape in range(1, NUMBER_OF_SHAPES + 1):
#Draw a Triangle
for sides in range(3):
forward(20 * shape)
left(120)
#Move forward to start position of next triangle
penup()
left(120)
forward(20 * shape)
right(120)
pendown()
【问题讨论】:
标签:
python
loops
iteration
turtle-graphics
python-turtle
【解决方案1】:
from turtle import *
import time
NUMBER_OF_SHAPES = 4
for shape in range(1, NUMBER_OF_SHAPES + 1):
#Draw a Triangle
for sides in range(5): #redraw some edges to place the cursor on the top
forward(20 * shape)
left(120)
#Move forward to start position of next triangle
penup()
right(60)
forward(10 * (shape+1)) # half of the size of the next triangle
right(180)
time.sleep(0.5)
pendown()
【解决方案2】:
在三角形之外思考:
from turtle import *
for length in range(20, 100, 20):
penup()
sety(length + ycor())
pendown()
circle(-2*length/3, steps=3)
hideturtle()
exitonclick()
这里使用 turtle 的circle() 方法来实现两个目标,第一个是绘制一个三角形steps=3,第二个是使用负半径从顶点开始绘制居中的三角形。除此之外,我们只需要调整垂直位置即可。
就您的代码而言,我相信问题比您尝试解决的问题要简单。如果我们先将三角形的长度向前移动 一半,然后从那里开始构建,事情会变得更容易:
from turtle import *
NUMBER_OF_SHAPES = 4
for shape in range(1, NUMBER_OF_SHAPES + 1):
forward(10 * shape)
for _ in range(4):
left(120)
forward(20 * shape)
right(120)
exitonclick()
这与反转循环中步骤的顺序相结合,并将迭代次数增加到 4 次,使我们为下一个三角形居中。