2009-05-26 6 views
1

im actuellement en train d'apprendre python (au tout début), donc j'ai encore quelques doutes sur les bonnes manières de code et comment dois-je procéder avec elle.Python code qui a besoin d'une vue d'ensemble

Aujourd'hui, je créé ce code qui devrait trought aléatoire 01-60 (mais à 01 allant de 69)

import random 

dez = ['0', '1', '2', '3', '4', '5', '6'] 
uni = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 
sort = [] 

while len(sort) <= 5: 
    random.shuffle(dez) 
    random.shuffle(uni) 
    w = random.choice(dez) 
    z = random.choice(uni) 
    chosen = str(w) + str(z) 
    if chosen != "00" and chosen not in sort: 
     sort.append(chosen) 
    print chosen 

Je suis aussi dans le doute comment faire l'arrêt de code à « 60 ».

Répondre

4

Vous réalisez que vous pouvez écrire exactement le même code dans une ligne, non? Il est facile en utilisant randint:

>>> [random.randint(1,60) for _ in range(6)] 
[22, 29, 48, 18, 20, 22] 

Cela vous donnera une liste de 6 aléatoires entiers entre 1 et 60. Dans votre code, vous créez des chaînes qui ont ces chiffres. Si vous les créez délibérément comme des chaînes, cependant, vous pouvez le faire:

>>> [str(random.randint(1,60)) for _ in range(6)] 
['55', '54', '15', '46', '42', '37'] 
+0

[str (random.randint (1,60)) pour _ dans ra nge (6)] pour être exact. :) – Deestan

+0

Ah, touchez la quantité de nombres aléatoires. Je ne pense vraiment pas qu'il les veut vraiment comme des cordes, cependant, c'est juste l'approche qu'il a prise. –

+0

Im se sentir vraiment stupide en ce moment La seule partie que je n'ai pas eue est que je pensais que l'interation "for/in" étaient seulement pour obtenir les variables de la liste, je ne savais pas travailler comme un compteur – Fabio

0

vous obtiendrez aucun avantage réel en réorganisant sur chaque boucle. Faites-le une fois avant la boucle.

choisi est pas un mot

+1

True, ressemble également à mélanger à chaque itération serait une perte énorme de performance correcte? – Fabio

+0

Le random.choice efface en fait le besoin de n'importe quel random.shuffle. – tzot

2

Vous pouvez simplement utiliser

random.randrange(1,60) 
+0

Quelle serait la différence entre randrange et randint? – Fabio

+1

De Python 2.6 source: def randint(self, a, b): return self.randrange(a, b+1) deno

1

Pour 6 entiers aléatoires uniques dans la plage de 1 à 59:

sample = random.sample(xrange(1, 60), 6) 
# -> [8, 34, 16, 28, 46, 39] 

Pour obtenir des chaînes:

['%02d' % i for i in sample] 
# -> ['08', '34', '16', '28', '46', '39'] 
Questions connexes