在Python中生成随机十六进制颜色

sin*_*inθ 52 python django

对于Django应用程序,每个"成员"都会分配一种颜色来帮助识别它们.它们的颜色存储在数据库中,然后在需要时打印/复制到HTML中.唯一的问题是我不确定如何Hex在python/django中生成随机颜色.生成RGB颜色很容易,但是为了存储它们,我要么需要a)在我的"Member"模型中创建三个额外的列,或者b)将它们全部存储在同一列中并使用逗号将它们分开,然后,解析HTML的颜色.这些都不是很吸引人,所以,再次,我想知道如何Hex在python/django中生成随机颜色.

Dmi*_*sky 110

import random
r = lambda: random.randint(0,255)
print('#%02X%02X%02X' % (r(),r(),r()))
Run Code Online (Sandbox Code Playgroud)

  • 可能应该使用`%02X`而不是'%2X`,以便在需要时填写前导0.否则页面将会退出,因为你最终可能会得到一个像#E1465`这样的空格. (8认同)
  • 作为变量:`color = '#{:02x}{:02x}{:02x}'.format(r(), r(), r())` (5认同)
  • 对于偏执:print('#%06X'%random.randint(256**3-1)) (2认同)
  • 您在评论中缺少该备用建议的参数,导致其无法运行.`print('#%06X'%random.randint(0,256**3-1))`虽然有效. (2认同)

Ene*_*nso 34

这是一个简单的方法:

import random
color = "%06x" % random.randint(0, 0xFFFFFF)
Run Code Online (Sandbox Code Playgroud)

要生成随机3 char颜色:

import random
color = "%03x" % random.randint(0, 0xFFF)
Run Code Online (Sandbox Code Playgroud)

%x在基于C语言中是一个字符串格式化程序,用于将整数格式化为十六进制字符串,而0x在base-16中写入数字的前缀.

如果需要,颜色可以带有"#"前缀(CSS样式)

  • f 字符串版本:`f"#{random.randint(0, 0xFFFFFF):06x}"` (6认同)

Rol*_*ith 9

将其存储为HTML颜色值:

更新:现在接受整数(0-255)和浮点(0.0-1.0)参数.这些将被限制在他们允许的范围内.

def htmlcolor(r, g, b):
    def _chkarg(a):
        if isinstance(a, int): # clamp to range 0--255
            if a < 0:
                a = 0
            elif a > 255:
                a = 255
        elif isinstance(a, float): # clamp to range 0.0--1.0 and convert to integer 0--255
            if a < 0.0:
                a = 0
            elif a > 1.0:
                a = 255
            else:
                a = int(round(a*255))
        else:
            raise ValueError('Arguments must be integers or floats.')
        return a
    r = _chkarg(r)
    g = _chkarg(g)
    b = _chkarg(b)
    return '#{:02x}{:02x}{:02x}'.format(r,g,b)
Run Code Online (Sandbox Code Playgroud)

结果:

In [14]: htmlcolor(250,0,0)
Out[14]: '#fa0000'

In [15]: htmlcolor(127,14,54)
Out[15]: '#7f0e36'

In [16]: htmlcolor(0.1, 1.0, 0.9)
Out[16]: '#19ffe5'
Run Code Online (Sandbox Code Playgroud)

  • 这怎么是随机的呢? (2认同)

Din*_* K. 8

派对迟到了,

import random
chars = '0123456789ABCDEF'
['#'+''.join(random.sample(chars,6)) for i in range(N)]
Run Code Online (Sandbox Code Playgroud)


mkn*_*cht 5

这是以前做过的.您可能希望使用现成的库,例如Faker,而不是自己实现,可能会引入错误.看一看在颜色供应商,尤其是hex_digit.

In [1]: from faker import Factory

In [2]: fake = Factory.create()

In [3]: fake.hex_color()
Out[3]: u'#3cae6a'

In [4]: fake.hex_color()
Out[4]: u'#5a9e28'
Run Code Online (Sandbox Code Playgroud)