Wie berechnet man alle Möglichkeiten mit Python?
Also grob erklärt: es gibt 6 Würfel mit jeweils 6 Seiten und die Summe der Augenzahlen soll zB. 26 sein
-> Ich möchte mit Python alle Möglichkeiten berechnen.
Ich kenn mich überhaupt nicht mit Python aus und bisher habe ich nur:
import mathimport itertools
len([x for x in itertools.product(range(1,7), repeat = 6) if sum(x == 26) ])
Kann man das so irgendwie machen?
3 Antworten
Die falsche Klammerung bei sum hast du ja schon selbst behoben.
Allerdings baut der Ausdruck temporär eine Liste mit allen Würfen auf, nur um sie nachher zu zählen. Das ist unnötig und bei einer Million Würfen ineffizient. So geht es einfacher:
count = sum( sum(x)==26 for x in
itertools.product(range(1,7), repeat=6)
)
Die innere Sequenz von Booleans wird vom äußeren sum() unmittelbar verarbeitet. Da stapeln sich keine Werte an.
Um alle Möglichkeiten zu berechnen, bei denen die Summe der Augenzahlen von 6 Würfeln mit jeweils 6 Seiten genau 26 ist, kannst du eine verschachtelte Schleife in Python verwenden. Hier ist ein einfacher Code, der dies tut:
import itertools
dice_count = 6
dice_sides = 6
target_sum = 26
# Erstelle eine Liste mit allen möglichen Würfelwürfen (1-6) für jeden Würfel
dice = [range(1, dice_sides + 1)] * dice_count
# Erzeuge alle möglichen Kombinationen der Würfelwürfe
combinations = list(itertools.product(*dice))
# Filtere die Kombinationen, bei denen die Summe der Augenzahlen gleich der Zielsumme ist
valid_combinations = [c for c in combinations if sum(c) == target_sum]
# Gebe die Anzahl der gültigen Kombinationen und die Kombinationen selbst aus
print(f"Anzahl der gültigen Kombinationen: {len(valid_combinations)}")
print(valid_combinations)
Coole Aufgabe, hab keine Python Umgebung zum Testen. Ich würde sowas bauen mit Listen und schleifen.
wuerfel1= (1,2,3,4,5,6)
wuerfel2= (1,2,3,4,5,6)
usw.
Dann
For w1 in wuerfel1{
For w2 in wuerfel2 {
Summe = (int) wuerfel1(w1) + (int) wuerfel2(w2) +..
If Summe ==26 print "Würfel1 =", wuerfel1(w1), "Würfel2(w2),...}}}}
Danke, das war auf jeden Fall ein guter Ansatz!
Ich hab meine Variante doch auch noch zum laufen gebracht:
count = len([x for x in itertools.product(range(1,7), repeat=6) if sum(x) == 26])
result = count / (6 ** 6)
print(result)