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.

186voto

Dmitry Dubovitsky Points 377
import random
r = lambda: random.randint(0,255)
print('#%02X%02X%02X' % (r(),r(),r()))

63voto

Eneko Alonso Points 2970

Voici un moyen simple :

import random
color = "%06x" % random.randint(0, 0xFFFFFF)

Pour générer une couleur aléatoire de 3 caractères :

import random
color = "%03x" % random.randint(0, 0xFFF)

%x dans les langages basés sur le C est un formateur de chaînes qui formate les entiers en chaînes hexadécimales, tandis que 0x est le préfixe permettant d'écrire les nombres en base 16.

Les couleurs peuvent être préfixées par "#" si nécessaire (style CSS)

14voto

Dinesh K. Points 25

Un peu tard à la fête,

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

11voto

Roland Smith Points 10392

La stocker en tant que valeur de couleur HTML :

Mise à jour : accepte désormais les arguments entiers (0-255) et flottants (0.0-1.0). Ceux-ci seront limités à leur plage autorisée.

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)

Résultat :

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'

10voto

mknecht Points 822

Cela a déjà été fait par le passé. Plutôt que de l'implémenter vous-même, en introduisant éventuellement des erreurs, vous pouvez utiliser une bibliothèque prête à l'emploi, par exemple Faussaire . Jetez un coup d'œil sur le site fournisseurs de couleurs et en particulier 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'

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