Как добавить рандомизирующие цвета в мою черепашью графику — Python

#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 это выглядит так

Для уровня 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