4 треугольника, которые должны быть выровнены по вертикали

#python #loops #iteration #turtle-graphics #python-turtle

Вопрос:

поэтому я работаю над программой, в которой я хочу, чтобы на выходе было 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()  

Ответ №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()  

Здесь мы использовали 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, оставляет нас в центре следующего треугольника.