2016-06-27 6 views
1

Ich möchte Code erstellen, der Anzahl der Würfel mal 'rollen' und finden Sie die Summe der Rollen. Das habe ich. Ich bekomme einen Fehler, wenn ich "Summe = Summe + Roll" mache, dass es nicht unterstützte Operandentypen für + gibt: built_in_function_or_method und int. Wie kann ich das lösen?Rollen eines Würfels in Python n mal

for i in range(0,number_of_dice): 
    roll = random.randint(1,number_of_sides + 1) 
    sum = sum + roll 
    return sum 
+0

Wie Sie entwickeln Sie können in aussehen soll [Generator Ausdrücke] (https://www.python.org/dev/peps/pep-0289/) und Verwendung die eingebaute 'sum'-Funktion. – AChampion

Antwort

2

Python hat in Funktion sum eine eingebaute, die die Summe von Zahlen als eine Folge gegeben zurückgibt. Da Sie keine Variable sum deklariert haben, versucht es +, die eingebaute Funktion und eine Nummer roll, die nicht zulässig ist. Sie müssen die Variable vor der Schleife definieren:

sum = 0 
for i in range(0,number_of_dice): 
    roll = random.randint(1,number_of_sides + 1) 
    sum = sum + roll 

return sum 

Beachten Sie, dass Sie sollen nach der Schleife zurück, nicht aus dem Inneren der Schleife. Wenn Sie die integrierte Funktion sum nicht schattieren möchten, können Sie auch einen anderen Namen für Ihre Variable verwenden.

+1

Nicht shadow 'sum'. Wer weiß, was das könnte brechen? –

+0

@SamyBencherif Wenn dieser Code innerhalb einer kleinen Funktion ist, dann können Sie in kleinen lokalen Bereich ohne viel Problem Schatten einbetten. Aber wenn der Umfang größer ist als dort, könnte das Problem sein. Offensichtlich können wir die Situation hier nicht ohne viel Zusammenhang sagen. Deshalb habe ich die letzte Zeile der Antwort platziert. – taskinoor

+0

Aber wenn Sie versuchen, eine neue Person zum Codieren einzuführen, sollten Sie sie einfach von der Angewohnheit der Verwendung von Einbauten als Variablennamen brechen. – PyNEwbie

0

ich verwenden würde:

import random 

def sum_of_dice(number_of_dice, n_sides_on_die=6): 
    return sum([random.choice(range(1, n_sides_on_die + 1)) 
       for i in range(number_of_dice)]) 
+0

Es ist wirklich nicht notwendig, eine Liste zu erstellen - entfernen Sie '[]' und Sie haben einen Generatorausdruck. 'randint()' tut dasselbe wie die 'Auswahl (Bereich (...))' – AChampion

Verwandte Themen