93 votes

Générer une couleur hexagonale aléatoire en Python

Dans une application Django, une couleur est attribuée à chaque "membre" pour l'aider à s'identifier. Cette couleur est stockée dans la base de données, puis imprimée/copiée dans le code HTML lorsque cela est nécessaire. Le seul problème est que je ne sais pas comment générer des couleurs aléatoires. Hex couleurs en python/django. Il est assez facile de générer des couleurs RVB, mais pour les stocker, je devrais soit a) créer trois colonnes supplémentaires dans mon modèle "Membre", soit b) les stocker toutes dans la même colonne et utiliser des virgules pour les séparer, puis, plus tard, analyser les couleurs pour le HTML. Aucune de ces solutions n'est très attrayante, donc, encore une fois, je me demande comment générer des couleurs aléatoires. Hex couleurs en python/django.

2voto

En gros, cela vous donnera un hashtag, un randint qui sera converti en hexagone, et un padding de zéros.

from random import randint
color = '#{:06x}'.format(randint(0, 256**3))
#Use the colors wherever you need!

1voto

StoryTeller Points 6139

Pour générer des objets aléatoires, consultez la rubrique module aléatoire

Je vous suggère d'utiliser le module pour générer un nombre entier aléatoire, de prendre son modulo 2**24 et traiter les 8 bits supérieurs comme R, les 8 bits du milieu comme G et les 8 bits inférieurs comme B.
Tout cela peut être réalisé avec des opérations div/mod ou bitwise.

1voto

AllTheTime1111 Points 56
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

1voto

Gayan Weerakutti Points 1989
import random

def get_random_hex:
    random_number = random.randint(0,16777215)

    # convert to hexadecimal
    hex_number = str(hex(random_number))

    # remove 0x and prepend '#'
    return'#'+ hex_number[2:]

1voto

Pavan Inguva Points 45

J'aimerais améliorer cette solution car j'ai constaté qu'elle pouvait générer des codes couleurs de moins de 6 caractères. Je voulais aussi générer une fonction qui créerait une liste qui pourrait être utilisée ailleurs, par exemple pour le clustering dans matplotlib.

import random

def get_random_hex:
    random_number = random.randint(0,16777215)

    # convert to hexadecimal
    hex_number = str(hex(random_number))

    # remove 0x and prepend '#'
    return'#'+ hex_number[2:]

Ma proposition est la suivante :

import numpy as np 

def color_generator (no_colors):
    colors = []
    while len(colors) < no_colors:
        random_number = np.random.randint(0,16777215)
        hex_number = format(random_number, 'x')
        if len(hex_number) == 6: 
            hex_number = '#'+ hex_number
            colors.append (hex_number)
    return colors

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X