Как использовать случайный, чтобы выбрать цвета

Я пытаюсь сделать небольшую программу, чтобы узнать больше, но я застрял, когда дело доходит до использования случайного.

Вот пример того, что я ухожу из https://trinket.io/Python/3338c95430

Я попытался использовать random.randrange, random.choice, random.random со всем для них, и он посылает код ошибки, говорящий, что random не имеет функции randrange, choice или random.

import turtle, math, random, time

wn = turtle.Screen()
wn.bgcolor('grey')
Rocket = turtle.Turtle()
Rocket.speed(0)
Rocket.color('red') ## this is what i want to randomize
rotate=int(90)

def drawCircles(t,size):
    for i in range(15):
        t.circle(size)
        size=size-10
def drawSpecial(t,size,repeat):
    for i in range(repeat):
        drawCircles(t,size)
        t.right(360/repeat)
drawSpecial(Rocket,100,10)

В конце концов я хотел бы реализовать более рандомизированные процессы, такие как размер и размещение, но сейчас я сосредоточен только на цвете.

Ответы

Ответ 1

Без использования дополнительного импорта это довольно просто:

turtle.colormode(255) # sets the color mode to RGB

R = random.randrange(0, 256, 100) # last value optional (step) 
B = random.randrange(0, 256)
G = random.randrange(0, 256)

# using step allows more control if needed
# for example the value of '100' would return '0', '100' or '200' only

Rocket.color(R, G, B) ## randomized from values above

Используя рандомизированные значения (200, 255, 23):

enter image description here

РЕДАКТИРОВАТЬ: Относительно "я просто изменить Turtle.colormode() на Rocket.colormode() для следующего?"

Я бы порекомендовал сделать это так: создать функцию:

def drawColor():

    turtle.colormode(255)

    R = random.randrange(0, 256)
    B = random.randrange(0, 256)
    G = random.randrange(0, 256)

    return R, G, B

Rocket.color(drawColor())

Таким образом, вы можете вызывать drawColor() любое время, когда вам нужен новый цвет.

Теперь, когда у вас есть основы рандомизации цветов для вашего рисунка, вы можете проявить творческий подход, используя значения для некоторых потрясающих результатов (откорректируйте целые числа по своему вкусу):

enter image description here

#!/usr/bin/python

import turtle, math, random, time

def drawColor(a, b, o):
    turtle.colormode(255)
    R = random.randrange(a, b, o) # last value is step (optional)
    B = random.randrange(a, b, o)
    G = random.randrange(a, b, o)
    # print(R, G, B)
    return R, G, B

def drawRocket(offset):
    Rocket = turtle.Turtle()
    Rocket.speed(0)
    Rocket.color(drawColor(20, 100, 1)) # start (0-256), end (0-256), offset 
    rotate=int(random.randrange(90))
    drawSpecial(Rocket,random.randrange(0, 10), offset)

def drawCircles(t,size):
    for i in range(30):
        t.circle(size)
        size = size - 20

def drawSpecial(t,size,repeat):
    for i in range(repeat):
        drawCircles(t,size)
        t.right(360/repeat)

def drawMain(x, y):
    wn = turtle.Screen()
    wn.bgcolor(drawColor(0, 20, 2))

    for i in range(3): # iterations
        drawRocket(x)
        x+=y
        # print(x)

drawMain(2, 10) # offset, step
input("Press ENTER to exit")

Ответ 2

Один из способов генерирования случайных цветов (при условии RGB) в диапазоне 256 - использовать np.random.choice.

import numpy as np

color = tuple(np.random.choice(range(256), size=3))
print(color)

Согласно комментарию jpmc26, другой метод, не требующий Numpy, заключается в использовании random.choices если вы используете Python 3. 6+. Это, вероятно, лучший вариант, так как импорт Numpy только для создания 3 случайных целых чисел является излишним.

import random

color = tuple(random.choices(range(256), k=3))
print(color)

Пример случайного вывода RGB

(248, 88, 28)

(165, 248, 150)

(188, 29, 135)

Ответ 3

random.choice возвращает случайный элемент из последовательности, просто передайте ему список со значениями, которые вы хотите выбрать:

rand_color = random.choice(['blue', 'red'])
Rocket.color(rand_color)