Ich bin ein bisschen auf eine Hausaufgabenfrage fixiert, die das Würfeln simuliert. In der Frage wird gefragt, ob eine Funktion erstellt werden soll, die einen zufälligen ganzzahligen Wert von 1 bis 6 zurückgibt, und ob ein Hauptprogramm erstellt werden soll, das den Benutzer fragt, wie viele Würfel gewürfelt werden sollen (muss auf 5 Würfel begrenzt sein), und die Funktion zum Drucken der generierten Würfel aufruft Werte. Bisher habe ich Folgendes:

import random

def dice(number_of_dice):
    for i in range(0,number_of_dice):
        return random.randint(1,6)


number_of_dice = input("How many dice would you like to roll? ")
while number_of_dice >5:
    number_of_dice = input("You may only have a limit of 5 dice, enter a number under 5. " )
print dice(number_of_dice) 

Beim Ausführen des Programms wird nur ein zufälliger ganzzahliger Wert zurückgegeben, unabhängig von der Eingabe "number_of_dice". Was genau ist hier falsch?

Jede Hilfe wird geschätzt, danke.

1
user1679073 7 Okt. 2012 im 23:13

3 Antworten

Beste Antwort

Sobald Ihre dice - Funktion ausgeführt wird und zum ersten Mal auf die return - Anweisung stößt, kehrt sie zurück, ohne den Rest der for - Schleife fortzusetzen.

Um dies zu beheben, können Sie eine lokale Variable in dice deklarieren, die die mehreren Ergebnisse enthält, die Sie zurückgeben möchten. Verwenden Sie Anweisungen wie

retval = []

retval.append(...)

return retval

(Ich überlasse es Ihnen, die Lücken auszufüllen.)

Eine fortgeschrittenere Verwendung von Python beinhaltet die Verwendung der Anweisung yield, um einen einzelnen Wert von einer speziellen Art von Funktion zurückzugeben, die als Generator bezeichnet wird. Dieser merkt sich, wo er sich befand, und kann später neu gestartet werden. Es lohnt sich jedoch, sich mit den Grundlagen vertraut zu machen, bevor Sie Funktionen wie yield verwenden.

4
Greg Hewgill 7 Okt. 2012 im 19:14

Sie verwenden eine while-Schleife wie diese

import random

from random import randint

while True:

  dice = input("how many dice would you like to roll?")

    prefix, middle, suffix = dice.partition("d")

Für das d im 2d6 etc.

    for _ in range (int(prefix)):

      print (random.randint(1, int(suffix)))
0
user9148266user9148266 8 Jän. 2018 im 05:19
def dice(number_of_dice):
    for i in range(0,number_of_dice):
        yield random.randint(1,6)  #yield will successivly return as opposed to just return

Jetzt können Sie wie eine Liste auf Würfel zugreifen ...

0
Joran Beasley 7 Okt. 2012 im 19:15