simple_draw - как нарисовать радугу?

import simple_draw as sd
    
sd.resolution = (1200, 600)
    
rainbow_colors = (sd.COLOR_RED, sd.COLOR_ORANGE, sd.COLOR_YELLOW, sd.COLOR_GREEN,
                      sd.COLOR_CYAN, sd.COLOR_BLUE, sd.COLOR_PURPLE)
    
# Нарисовать радугу: 7 линий разного цвета толщиной 4 с шагом 5 из точки (50, 50) в точку (350, 450)
# TODO здесь ваш код
start_point = sd.get_point(50, 50)
end_point = sd.get_point(350, 450)
step_x = 5
step_y = 5
    
for _ in range(7):
    sd.line(start_point=start_point, end_point=end_point, width=4)

Не могу понять как нарисовать радугу. Уже часа 4 пытаюсь, нужно дублировать линии, запутался уже в кодах. Как только не пробую, только одна линия получается. Подскажите пожалуйста. Сильно не ругайте, начал пару дней назад изучать Пайтон.


Ответы (4 шт):

Автор решения: strawdog

Очевидно, что при отрисовке каждой линии вам нужно сдвигать начало и конец линии на величину обозначенного шага. Например так:

import simple_draw as sd
    
sd.resolution = (1200, 600)
    
rainbow_colors = (sd.COLOR_RED, sd.COLOR_ORANGE, sd.COLOR_YELLOW, sd.COLOR_GREEN,
                      sd.COLOR_CYAN, sd.COLOR_BLUE, sd.COLOR_PURPLE)
    

start_x = 50
start_y = 50
end_x = 350
end_y = 450
step_x = 5
step_y = 5
    
for i in range(7):
    start_x+=i*step_x
    start_y+=i*step_y
    end_x+=i*step_x
    end_y+=i*step_y
    sd.line(start_point=sd.get_point(start_x, start_y), end_point=sd.get_point(end_x, end_y), color=rainbow_colors[i], width=4)

sd.pause()

введите сюда описание изображения

→ Ссылка
Автор решения: FausFear

У меня вот так получилось сделать:

point = sd.get_point(600, -500) 

r = 900

for r in range(600, 900, 10):

    for color in random_color():
        sd.circle(center_position=point, radius=r, color=random_color(), width=20)
sd.pause()

Не получилось переменную random_color подставить почему-то, пришлось random_color() подставить.

введите сюда описание изображения

→ Ссылка
Автор решения: MacClane

Моё решение: что бы нарисовать следующую линию не обязательно менять 'Y', а достаточно поменять 'X'. Шаг то-же указывать не обязательно, достаточно задать изменения для 'X' в теле цикла.

enumerate(rainbow_colors ) как советует - CrazyElf

использовать, смысла, не вижу. Так как 'enumerate' возвращает индекс и значение элемента, а нам достаточно одного из них. В этом смысле 'len' для цикла оптимальное решение.

Ширину и шаг изменил для лучшего визуального результата.

import simple_draw as sd

sd.resolution = (600, 600)

rainbow_colors = (
    sd.COLOR_RED, sd.COLOR_ORANGE, sd.COLOR_YELLOW, sd.COLOR_GREEN,
    sd.COLOR_CYAN, sd.COLOR_BLUE, sd.COLOR_PURPLE)

x = 50
x1 = 350

for i in range(len(rainbow_colors)):
    x += 30
    x1 += 30
    sd.line(sd.Point(x, 50), sd.Point(x1, 450), color=rainbow_colors[i], width=10)

sd.pause()

введите сюда описание изображения

→ Ссылка
Автор решения: Роман

А я вот не понимаю, зачем вводить range[7] или range(len(raindow_colors)). Конечно, это работает, но если задать переменную из списка в цикле: for color in raindow_colors, то будет перебор как раз по всем цветам. Долго думал, как решить, перебирал разные решения, но пришёл к такому:

import simple_draw as sd

rainbow_colors = (sd.COLOR_RED, sd.COLOR_ORANGE, sd.COLOR_YELLOW, sd.COLOR_GREEN,
                  sd.COLOR_CYAN, sd.COLOR_BLUE, sd.COLOR_PURPLE)

sd.resolution = (500, 500)
y_start, y_end = 50, 450

for color in rainbow_colors:
    start_point = sd.get_point(50, y_start)
    end_point = sd.get_point(350, y_end)
    y_start -= 5
    y_end -= 5
    sd.line(start_point=start_point, end_point=end_point, color=color, width=4)

Задаём размеры окна, дальше создаём переменные по оси Y, начальную и конечную, только их и будем изменять, создаём цикл с перебором имеющегося списка, а дальше ставим начальные и конечные точки, вместо второй координаты переменные, и ниже изменяем их на 5 за каждый цикл, чтобы полосы двигались. А в конце всё это выводим. Прописываем начальную, конечную координаты из переменных, которые задали выше, а в цвете указываем ту переменную, которую задали в цикле, то есть color. Она и будет менять цвета. А ширина 4. Конец.

→ Ссылка