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 шт):
Очевидно, что при отрисовке каждой линии вам нужно сдвигать начало и конец линии на величину обозначенного шага. Например так:
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()
У меня вот так получилось сделать:
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() подставить.
Моё решение: что бы нарисовать следующую линию не обязательно менять '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. Конец.


