2016-05-08 10 views
3

Nur einige Übungsübungen durchlaufen, diese bittet darum, eine Würfelrolle zu erstellen, die eine Zufallszahl generiert. Die Argumente der Funktion sollen sein (Anzahl der Seiten auf den Würfeln, Anzahl der Rollen)Wie man zurückkehrt, wenn die Variable mehrmals geloopt wird

Wenn ich einfach Return benutze stoppt es die Schleife. Ich kenne einen Weg, um die Antworten zu kombinieren und zu drucken, aber was ist, wenn die Anzahl der Antworten (oder Rollen in diesem Fall) eine Variable ist?

Hier ist mein Code:

#roll_dice 
import random 

def rolldice(sides, rolls): 
    start = 1 
    while start <= rolls: 
    number = random.randint(1, sides) 
    start += 1 
    return number 

print rolldice(6, 3) 

Wie kann ich das dies drucken erhalten:

3 
5 
2 
+0

Ihre Variablen Namen geben, nicht b und x . –

+1

ok done ......... –

Antwort

1

können Sie verwenden yield

import random 

def rolldice(sides, rolls): 
    for i in xrange(0, rolls): 
    yield random.randint(1, sides) 

for item in rolldice(6,3): 
    print item 
+1

'lst' ist ein bisschen irreführend, da es ein Iterator ist. Einfacher zu tun' für Item in Rolldice (6, 3): ... Verwenden Sie auch 'xrange()' anstatt einen Zähler manuell zu inkrementieren – augurar

+0

@augurar good point – Hooting

+0

Dies funktionierte perfekt! Vielen Dank –

1

Sie möchten eine Liste an den Benutzer zurück, und dann die Liste auszudrucken in angegebene Form:

#roll_dice 
import random 

def rolldice(sides, rolls): 
    numbers = [] 
    index = 0 
    while index < rolls: 
    number = random.randint(1, sides) 
    numbers.append(number) 
    index += 1 
    return numbers 

print '\n'.join(rolldice(6, 3)) 
+0

Das wirft mich einen Fehler: "Traceback (letzter Anruf zuletzt): Datei"/Users/nhud ........... ", Zeile 55, in drucken '\ n'.join (rolldice2 (6, 3)) Datei "/ Users/nhud ...........", Zeile 51, in rolldice2 Zahlen [Index] = Nummer IndexError: Listenzuweisungsindex außerhalb des Bereichs –

+0

@SenorPenguin Entschuldigung, das sollte jetzt behoben werden! –

2

Sie können eine Liste Verständnis wie folgt verwenden, die wird Ihre Funktion erstellt eine Liste von Zufallszahlen zurückgibt:

>>> import random 
>>> def rolldice(sides, rolls): 
...  return [random.randint(1, sides) for _ in xrange(rolls)] 

Demo:

>>> rolldice(6, 3) 
[1, 2, 3] 
>>> rolldice(6, 3) 
[2, 6, 4] 
+0

Dies druckt nicht genau, wie ich es wollte, aber es ist ver y prägnant und erledigt den Job. Vielen Dank! –

+1

Sie können es genau so drucken lassen, wie Sie es wollten, indem Sie es wie folgt aufrufen: 'print (" \ n ".join ([str (x) für x in rolldice (6,3)]))' jedes Element wird auf a gehen newline, weil Sie '" \ n ".join()' verwenden – Keatinge

Verwandte Themen