2009-05-26 2 views
1

Ich lerne gerade Python (am Anfang), also habe ich immer noch Zweifel an guten Code-Manieren und wie soll ich damit fortfahren?Python-Code, der einen Überblick benötigt

Heute habe ich diesen Code erstellt, der sollte zufällig trought 01-60 (aber 01 bis 69 ausgeführt wird)

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 

Ich bin auch in Zweifel, wie der Code Stopp bei „60“ zu machen.

Antwort

4

Sie wissen, dass Sie den gleichen Code in 1 Zeile schreiben können, richtig? Es ist leicht randint mit:

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

Diese Sie zwischen 1 und 60. In Ihrem Code eine Liste von 6 zufällige ganzen Zahlen Strings, die diese Zahlen geben haben Sie erstellen. Wenn Sie absichtlich sie als Strings erstellen, aber dann können Sie dies tun:

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

[str (random.randint (1,60)) für _ in ra nge (6)] um genau zu sein. :) – Deestan

+0

Ah, berühren Sie die Anzahl der Zufallszahlen. Ich glaube wirklich nicht, dass er sie wirklich als Streicher will, aber das ist nur der Ansatz, den er gemacht hat. –

+0

Im Gefühl wirklich dumm jetzt Der einzige Teil, den ich nicht bekommen habe, war ich die "for/in" -Interation waren nur für die Listen Variablen, wusste nicht, dass es funktioniert als Zähler auch – Fabio

0

Sie werden keinen wirklichen Vorteil erhalten, indem auf jeder Schleife schlurfen. Mach es einmal vor der Schleife.

gewählte ist kein Wort

+1

True, sieht auch aus wie Mischen auf jeder Iteration wäre ein großer Verlust der Leistung korrekt? – Fabio

+0

Die random.choice löscht tatsächlich die Notwendigkeit für jeden random.shuffle. – tzot

2

Sie haben soeben

random.randrange(1,60) 
+0

Was wäre der Unterschied zwischen Randrange und Randint? – Fabio

+1

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

1

Um 6 einzigartige Zufallszahlen zu erhalten im Bereich von 1 bis 59 verwenden können:

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

Um Strings zu erhalten:

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