如何使用随机函数选择颜色

23

我正在尝试编写一个小程序来学习更多内容,但在使用随机函数时遇到了困难。

这里有一个示例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)

最终,我想要实现更多像大小和位置这样的随机化过程,但现在我只关注颜色。

3个回答

17

不使用额外的导入,它相当简单:

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

所以我尝试了这个,但出现了错误“R = random.randrange(0, 256, 100) # 最后一个值是可选的(步长) AttributeError: 模块“random”没有属性“randrange”,但我在Python IDLE中尝试过它,并且它可以工作,现在我将在其他地方实施它,那么下一个我只需要将turtle.colormode()更改为Rocket.colormode()吗? - jman8453
@jman8453:我建议创建一个颜色函数,这样每次调用Rocket.colormode()时都可以获得随机颜色;我会在答案中编辑一个示例。 - l'L'l
3
非常感谢,我最初并没有期望能在网上搜寻多次后找到很多关于我的问题的帮助。我非常兴奋能够学到更多知识并自己动手做些东西。目前,这是一次非常有趣的学习经验! - jman8453

4

在256范围内生成随机颜色的一种方法(假设是RGB)是使用np.random.choice

import numpy as np

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

根据jpmc26的评论,如果你使用Python 3.6+,另一种不需要Numpy的方法是使用random.choices。这可能是更好的选择,因为仅仅为了创建3个随机整数而导入Numpy是过度的。
import random

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

示例随机RGB输出

(248, 88, 28)

(165, 248, 150)

(188, 29, 135)


空闲状态一直告诉我一个错误,说没有名为numpy的模块,这是因为我正在使用turtle还是其他什么原因? - jman8453
1
这是另一个包,你可以使用 python -m pip install numpy 命令安装它。 - nathancy
7
Numpy 是一个强大的用于处理 N 维数组对象的软件包。仅为创建 3 个随机整数,安装它(即使只是导入)并没有太多意义。 - VPfB
1
我同意它主要用于数值处理,可能有些过度,但这只是生成随机RGB颜色的另一种选择 :) - nathancy
3
使用 Python 3.6+,您可以使用 random.choices(range(256), k=3) 而不需要安装 numpy。 - jpmc26
@jpmc26 那可能是最好的方法。 - nathancy

4

random.choice 从一个序列中随机选择一个元素,只需要给它传递一个包含你想要选择的值的列表:

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

好的,我在使用随机选择时做错了,我以为它会像这样进行: Rocket.color(random.choice(rand_color)) 谢谢你! - jman8453

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接