【问题标题】:How to use random to choose colors如何使用随机选择颜色
【发布时间】:2019-10-29 14:31:56
【问题描述】:

我正在尝试制作一个小程序来了解更多信息,但在使用随机数时被卡住了。

这里是我要离开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)

最终我想实现更多的随机过程,比如尺寸和位置,但现在我只关注颜色。

【问题讨论】:

    标签: python random colors


    【解决方案1】:

    在 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。这可能是一个更好的选择,因为导入 Numpy 只是为了创建 3 个随机整数是多余的。

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

    随机 RGB 输出示例

    (248, 88, 28)

    (165, 248, 150)

    (188, 29, 135)

    【讨论】:

    • so idle 一直告诉我一个错误,没有名为 numpy 的模块会不会是因为我使用了 turtle 之类的?
    • 它是另一个包,你可以用python -m pip install numpy安装它
    • Numpy 是一个强大的 N 维数组对象计算包。仅仅为了创建 3 个随机整数而安装(甚至不导入 IMO)它没有多大意义。
    • 我同意它主要用于数值处理,可能有点矫枉过正,但它只是生成随机 RGB 颜色的另一种选择 :)
    • 使用 Python 3.6+,您可以使用 random.choices(range(256), k=3) 而无需 numpy。
    【解决方案2】:

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

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

    【讨论】:

    • 好的,所以我在随机选择上做错了,我认为它会更像 Rocket.color(random.choice(rand_color)) 谢谢!
    【解决方案3】:

    不使用额外的导入非常简单:

    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) 的随机值:

    编辑:关于“我可以改变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() 获取新颜色。

    现在您已经掌握了为绘图随机分配颜色的基础知识,您可以利用这些值获得一些非常棒的效果(根据自己的喜好调整整数):

    #!/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) # last value optional (step) AttributeError: module 'random' has no attribute 'randrange' but i在 python idle 中尝试过它并且它有效,现在我将在其他人上实现它,所以我是否只需将 turtle.colormode() 更改为 Rocket.colormode() 用于下一个?
    • @jman8453:我建议为颜色创建一个函数,然后您可以随时调用Rocket.colormode() 获取随机颜色;我会用一个例子来编辑答案。
    • 非常感谢,老实说,在网上搜索了很多关于我的问题后,我并没有期待太多帮助。我真的很高兴能更多地了解这一切并做出自己的东西,但到目前为止,这是一次非常有趣的学习经历!
    猜你喜欢
    • 2019-03-29
    • 2014-06-12
    • 1970-01-01
    • 2011-07-07
    • 2014-10-07
    • 2012-08-24
    • 2017-03-29
    • 2022-01-16
    • 2021-09-29
    相关资源
    最近更新 更多