2012-01-29 10 views
2

Couleur = ["rouge", "bleu", "vert", "jaune", "violet", "orange", "blanc", "noir"] générer et imprimer une liste de 50 couleurs aléatoires. Vous devrez utiliser le module aléatoire pour obtenir des nombres aléatoires. Utilisez la plage et la carte pour générer le nombre de chiffres requis. Utilisez ensuite la carte pour traduire les nombres en couleurs. Imprime le résultat.Comment générer une liste de 50 couleurs aléatoires en python?

C'est une question que j'ai donné et voici mon code jusqu'à présent

colour = [ "red", "blue", "green", "yellow", "purple", "orange", "white", "black" ] 

number=random.randint(1,9) 

number.range(50) 

Je suppose que cela a fait une variable qui prend des nombres aléatoires entre 1-9, et fait alors 50 d'entre eux ? J'ai maintenant besoin d'un moyen de relier les chiffres aux couleurs .. Je sais que cette question est assez vague, mais si quelqu'un pouvait me pointer dans la bonne direction, ce serait génial!

Répondre

1

Pour une raison quelconque, votre question nécessite l'utilisation de map. Il est difficile d'aider avec cette question sans donner la réponse directement, surtout parce que ces types de manipulations sont à sens unique. Pour commencer, en utilisant la carte et la gamme pour obtenir une liste de nombres aléatoires dans la gamme requise:

>>> nums = map(lambda x : random.randint(0,7), range(50)) 
>>> nums 
[6, 6, 2, 4, 7, 6, 6, 7, 1, 4, 3, 2, 6, 1, 1, 2, 2, 0, 7, 
3, 6, 1, 5, 2, 1, 2, 6, 0, 3, 0, 2, 6, 0, 6, 3, 5, 0, 7, 
2, 5, 4, 1, 0, 0, 1, 4, 3, 3, 0, 3] 

Observons que l'argument lambda, x n'est pas utilisé. C'est au moins une raison pour laquelle je n'utiliserais pas de carte ici. Puis, en utilisant la liste des numéros, la carte la fonction d'indexation sur les numéros pour obtenir la liste des couleurs:

>>> cols = map(lambda i: colour[i], nums) 
>>> cols 
['white', 'white', 'green', 'purple', 'black', 'white', 'white', 
'black', 'blue',  'purple', 'yellow', 'green', 'white', 
'blue', 'blue', 'green', 'green', 'red', 'black', 'yellow', 
'white', 'blue', 'orange', 'green', 'blue', 'green', 'white', 
'red', 'yellow', 'red', 'green', 'white', 'red', 'white', 
'yellow', 'orange', 'red', 'black', 'green', 'orange', 'purple', 
'blue', 'red', 'red', 'blue', 'purple', 'yellow', 'yellow', 'red', 
'yellow'] 

La réponse donnée par soulcheck, en utilisant random.choice() dans une compréhension de la liste, est de loin la meilleure façon de déterminer la réponse.

+0

c'est parfait, je suis d'accord dans l'autre sens est beaucoup plus facile, mais apparemment c'est la façon dont j'ai besoin! Merci de votre aide ! –

1

Vous pouvez utiliser une simple liste de compréhension pour cela:

[ colour[random.randint(0,len(colour)-1)] for x in range(0,50) ] 

colour[i] signifie que l'élément i e dans la liste colour. Un entier aléatoire est créé de 0 à la longueur de la liste moins un, len(colour)-1, avec random.randint comme vous l'avez suggéré. Ceci est répété 50 fois avec range(1,50). La valeur de l'itérateur fictif x dans la compréhension de la liste est simplement ignorée.

Espérons que cela aide!

+0

Il ya 'random.choice' pour exactement cette chose ... Et' range (1, 50) 'est seulement 49 choix. – Gandaro

+0

@Gandaro bons points! – danr

5

Ce dont vous avez besoin est d'utiliser random.choice(seq) 50 fois en passant la colour liste comme argument.

Comme ceci:

rand_colours = [random.choice(colour) for i in range(50)] 

random.choice(seq) rendement élément choisis au hasard seq.

+0

Nice! Y a-t-il un équivalent à 'replicate' et' replicateM' de Haskell qui évalue une expression un certain nombre de fois et renvoie le résultat dans une liste? – danr

+0

@danr Je ne pense pas qu'il y ait un équivalent direct. [tutorial python] (http://docs.python.org/library/itertools.html#itertools.starmap) donne un exemple d'utilisation de 'itertools.starmap' pour répéter un appel de fonction n fois. Il utilise même 'random.random' dans' repeatfunc'. Quoi qu'il en soit, il semble que l'utilisation de 'for 'est la façon la plus simple de le faire. – soulcheck

Questions connexes