简体   繁体   中英

How to use random to choose colors

I'm trying to make a little program to learn more, but am stuck when it comes to using random.

Here is an example of what I'm going off of https://trinket.io/Python/3338c95430

I've tried using random.randrange, random.choice, random.random with everything for them and it sends an error code saying random doesn't have a function of randrange, choice, or 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)

Eventually I would like to implement more randomized processes like the size and placement but for now I'm just focusing on color.

Without using additional imports it's fairly 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

Using randomized values of ( 200 , 255 , 23 ):

在此输入图像描述

EDIT : Regarding "would i just change the turtle.colormode() to Rocket.colormode() for the next one?"

The way I would recommend doing it would be to create a function:

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())

This way you can call drawColor() anytime you want a new color.

Now that you have the basics of randomizing colors for your drawing you can get quite creative with the values for some awesome looking results (adjust integers to your liking):

在此输入图像描述

#!/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")

One way to generate random colors (assuming RGB) within the 256 range is to use np.random.choice .

import numpy as np

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

As per jpmc26's comment, another method without requiring Numpy is to use random.choices if you're using Python 3.6+. This is probably a better option since importing Numpy just to create 3 random integers is overkill.

import random

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

Example random RGB output

(248, 88, 28)

(165, 248, 150)

(188, 29, 135)

random.choice returns a random element from a sequence, just pass it a list with the values you want to choose from:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM