seqio - Generando un color hexadecimal aleatorio en Python
read fasta python (12)
Almacénelo como un valor de color HTML:
Actualizado: ahora acepta los argumentos de entero (0-255) y flotante (0.0-1.0). Estos serán fijados a su rango permitido.
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)
Resultado:
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''
Para una aplicación Django, a cada "miembro" se le asigna un color para ayudar a identificarlos. Su color se almacena en la base de datos y luego se imprime / copia en el HTML cuando es necesario. El único problema es que no estoy seguro de cómo generar colores Hex
aleatorios en python / django. Es bastante fácil generar colores RGB, pero para almacenarlos necesitaría a) hacer tres columnas adicionales en mi modelo de "Miembro" o b) almacenarlas todas en la misma columna y usar comas para separarlas, luego, más adelante, analizar los colores para el HTML. Ninguno de estos es muy atractivo, así que, nuevamente, me pregunto cómo generar colores Hex
aleatorios en python / django.
Aquí hay una forma simple:
import random
color = "%06x" % random.randint(0, 0xFFFFFF)
Para generar un color aleatorio de 3 caracteres:
import random
color = "%03x" % random.randint(0, 0xFFF)
%x
en lenguajes basados en C es un formateador de cadenas para formatear enteros como cadenas hexadecimales, mientras que 0x
es el prefijo para escribir números en base-16.
Los colores pueden tener el prefijo "#" si es necesario (estilo CSS)
Básicamente, esto te dará un hashtag, un randint que se convierte en hexadecimal y un relleno de ceros.
from random import randint
color = ''#{:06x}''.format(randint(0, 256**3))
#Use the colors wherever you need!
Esto se ha hecho antes. En lugar de implementar esto usted mismo, posiblemente introduciendo errores, es posible que desee utilizar una biblioteca lista, por ejemplo, Faker . Eche un vistazo a los proveedores de color , en particular 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''
Hay tantas formas de hacer esto, así que aquí hay una demostración con " colorutils ".
pip instalar colorutils
Es posible generar valores aleatorios en (RGB, HEX, WEB, YIQ, HSV).
# docs and downloads at
# https://pypi.python.org/pypi/colorutils/
from colorutils import random_web
from tkinter import Tk, Button
mgui = Tk()
mgui.geometry(''150x28+400+200'')
def rcolor():
rn = random_web()
print(rn) # for terminal watchers
cbutton.config(text=rn)
mgui.config(bg=rn)
cbutton = Button(text="Click", command=rcolor)
cbutton.pack()
mgui.mainloop()
Ciertamente espero que haya sido útil.
Simplemente almacénelos como un entero con los tres canales en diferentes desplazamientos de bits (como a menudo se almacenan en la memoria):
value = (red << 16) + (green << 8) + blue
(Si cada canal es 0-255). Almacene ese número entero en la base de datos y realice la operación inversa cuando necesite volver a los distintos canales.
poco tarde a la fiesta,
import random
chars = ''0123456789ABCDEF''
[''#''+''''.join(sample(chars,6)) for i in range(N)]
import random
def generate_color():
color = ''#{:02x}{:02x}{:02x}''.format(*map(lambda x: random.randint(0, 255), range(3)))
return color
import random
def hex_code_colors():
a = hex(random.randrange(0,256))
b = hex(random.randrange(0,256))
c = hex(random.randrange(0,256))
a = a[2:]
b = b[2:]
c = c[2:]
if len(a)<2:
a = "0" + a
if len(b)<2:
b = "0" + b
if len(c)<2:
c = "0" + c
z = a + b + c
return "#" + z.upper()
import random
r = lambda: random.randint(0,255)
print(''#%02X%02X%02X'' % (r(),r(),r()))
hex_digits = [''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''a'',''b'',''c'',''d'',''e'',''f'']
digit_array = []
for i in xrange(6):
digit_array.append(hex_digits[randint(0,15)])
joined_digits = ''''.join(digit_array)
color = ''#'' + joined_digits