#python #colors #turtle-graphics
#python #Цвет #черепаха-графика
Вопрос:
Итак, у меня есть эта рекурсивная графика, которая отлично работает, но мне было интересно, что касается графики turtle, и в моем случае, как мне сделать, чтобы каждый сегмент строки был случайным цветом?
from turtle import *
def line(t, x1, y1, x2, y2):
"""draws the line segment from x1,y1 to x2,y2"""
t.up()
t.goto(x1, y1)
t.down()
t.goto(x2, y2)
def drawLine(t, x1, y1, x2, y2, level):
"""forms the shape"""
if level == 0:
line(t, x1, y1, x2, y2)
else:
xm = ((x1 x2) (y2 - y1)) // 2
ym = ((y1 y2) (x1 - x2)) // 2
drawLine(t, x1, y1, xm, ym, level-1)
drawLine(t, xm, ym, x2, y2, level-1)
def main():
"""the main function"""
myTurtle = Turtle()
myTurtle.hideturtle()
num = int(input("Please enter the number of levels: "))
drawLine(myTurtle, 100, 0, 100, -200, num)
main()
Комментарии:
1. графика создает форму C, которая зацикливается на сегментах в зависимости от того, сколько уровней вы добавляете, но я полагаю, что это просто информация о пух
Ответ №1:
Вы можете создать список цветов, а затем использовать random.choice
для выбора случайного цвета из списка при рисовании каждой линии.
Вот обновление кода
from turtle import *
import random
colors = ['red','green','blue','indianred','firebrick','ForestGreen'] # color list
def line(t, x1, y1, x2, y2):
"""draws the line segment from x1,y1 to x2,y2"""
t.color(random.choice(colors)) # pick color from list
t.up()
t.goto(x1, y1)
t.down()
t.goto(x2, y2)
......
Вывод (10 уровней)
Комментарии:
1. вы не возражаете, если я отредактирую свой ответ, чтобы добавить скриншот? оба наших ответа немного похожи, поэтому не хочу показаться, что я скопировал ваш, добавив скриншот 🙂
2. Нет проблем — попробуйте другой уровень, чтобы добавить разнообразия 🙂
3. спасибо 1 за скриншот и за то, что опередили меня в этом
4. вау, оба этих ответа проясняют все для меня, и я буду тестировать оба метода, чтобы увидеть, что работает лучше всего, но еще раз большое вам спасибо!!!!
Ответ №2:
Вы можете получить тройной случайный цвет, используя tuple(randint(0,255) for _ in range(3))
модуль where randint
is from random
. Затем вы можете вызывать эту функцию каждый раз, когда рисуете линию t.pencolor(*get_rand_color())
.
PS: colormode(255)
должно быть установлено в коде для настройки цветов в виде кортежей, теперь теоретически вы можете получить любой из 16.8 million colors
возможных.
from turtle import *
from random import randint
def line(t, x1, y1, x2, y2):
"""draws the line segment from x1,y1 to x2,y2"""
t.up()
t.goto(x1, y1)
t.down()
t.pencolor(*get_rand_color())
t.goto(x2, y2)
def get_rand_color():
"""
Returns a 3-tuple of random numbers in the range 0 - 255
eg : (89, 103, 108)
"""
return tuple(randint(0,255) for _ in range(3))
def drawLine(t, x1, y1, x2, y2, level):
"""forms the shape"""
if level == 0:
line(t, x1, y1, x2, y2)
else:
xm = ((x1 x2) (y2 - y1)) // 2
ym = ((y1 y2) (x1 - x2)) // 2
drawLine(t, x1, y1, xm, ym, level-1)
drawLine(t, xm, ym, x2, y2, level-1)
def main():
"""the main function"""
myTurtle = Turtle()
myTurtle.hideturtle()
colormode(255)
num = 6
drawLine(myTurtle, 100, 0, 100, -200, num)
main()
Для уровня 5
это выглядит так
Редактировать: как указывает @cdlane в комментариях, « colormode(255)
должен быть установлен для указания цветов в качестве значений в диапазоне от 0 до 255. По умолчанию цветовой режим turtle использует значения в диапазоне 0.0 — 1.0, и они могут быть заданы кортежем: (0.5, 0.125, 0.333)».
Другими словами, если вы этого не сделаете colormode(255)
, вы можете изменить get_rand_color
функцию, чтобы возвращать значения в диапазоне 0.0
до 1.0
вместо 0
to 255
.
Комментарии:
1. Ваше утверждение о том, что «colormode (255) должен быть установлен в коде для настройки цветов в виде кортежей», неверно. Он должен быть настроен на указание цветов в качестве значений в диапазоне от 0 до 255. По умолчанию цветовой режим turtle использует значения в диапазоне 0.0 — 1.0, и они могут быть заданы кортежем:
(0.5, 0.125, 0.333)
2. спасибо, что указали на это,, если вы не возражаете, я добавляю то, что вы сказали, в качестве редактирования @cdlane