python - Cómo usar al azar para elegir colores.
random colors (3)
Estoy tratando de hacer un pequeño programa para aprender más, pero estoy atascado cuando se trata de usar al azar.
Aquí hay un ejemplo de lo que estoy haciendo en https://trinket.io/Python/3338c95430
He intentado usar random.randrange, random.choice, random.random con todo para ellos y envía un código de error que dice que random no tiene una función de randrange, elección o 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)
Eventualmente, me gustaría implementar más procesos aleatorios como el tamaño y la ubicación, pero por ahora solo me estoy enfocando en el color.
Sin usar importaciones adicionales es bastante simple:
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
Usando valores aleatorios de (
200
,
255
,
23
):
EDITAR : En relación con "¿acabo de cambiar el turtle.colormode () a Rocket.colormode () para el siguiente?"
La forma en que lo recomendaría sería crear una función:
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())
De esta manera, puede llamar a
drawColor()
cuando quiera un nuevo color.
Ahora que tiene los conceptos básicos de los colores aleatorios para su dibujo, puede ser bastante creativo con los valores de algunos resultados impresionantes (ajuste los enteros a su gusto):
#!/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")
Una forma de generar colores aleatorios (suponiendo RGB) dentro del rango de 256 es usar
np.random.choice
.
import numpy as np
color = tuple(np.random.choice(range(256), size=3))
print(color)
Según el comentario de jpmc26, otro método sin requerir Numpy es usar
random.choices
si está usando Python 3.6+.
Esta es probablemente una mejor opción ya que la importación de Numpy solo para crear 3 enteros aleatorios es una exageración.
import random
color = tuple(random.choices(range(256), k=3))
print(color)
Ejemplo de salida aleatoria RGB
(248, 88, 28)
(165, 248, 150)
(188, 29, 135)
random.choice
devuelve un elemento aleatorio de una secuencia, solo pásele una lista con los valores que desea elegir:
rand_color = random.choice([''blue'', ''red''])
Rocket.color(rand_color)