Python :: Aufgabe #66

4 Lösungen Lösungen öffentlich

Verteilung beim Würfeln mit zwei Würfeln

Anfänger - Python von Alucard1766 - 11.02.2015 um 13:59 Uhr
Angenommen du wirfst sehr viel mal mit zwei Würfeln. Wie sieht die Verteilung der Summe der geworfenen Würfelzahlen aus?

Vorgaben:
Simuliere möglichst zufällig sehr viele Würfe mit zwei Standardwürfel(=1-6).
Mindestens 100'000 Würfe, je mehr desto besser. -> Performanter Code
Gib aus, wie die Verteilung der Summe der beiden Würfeln prozentual/im Verhältnis aussehen
Du musst in der Lösung auf dieser Seite eine gut sicht- und interpretierbare Darstellung der Verteilung haben, damit wir die Ergebnisse vergleichen können


Beispiel:

Konsolenausgabe:

1. Wurf: 1 und 5 - Summe 6
2. Wurf: 4 und 2 - Summe 6
...
100000. Wurf: 3 und 1 - Summe 4

Ergebnis:
1 - 5%
2 - 7%
12 - 6%

Lösungen:

vote_ok
von frfrey (370 Punkte) - 16.03.2015 um 23:11 Uhr
Quellcode ausblenden Python-Code
import random, matplotlib.pyplot as plt
n= int(raw_input("Wie oft soll gewuerfelt werden?:"))

"""--------------Erzeugen eines Dictionaries----------------"""
d={}
for i in range(2,13,1):
    d[i]=0

"""--------------Methoden------------------------------------"""
        
def wuerfeln():                     #Simuliert den Würfelvorgang mit zwei Würfel
    w1=random.randrange(1,7,1)
    w2=random.randrange(1,7,1)
    az=w1+w2
    return az                       #Rückgabe der zufälligen Augenzahl 

def speicher(az,d):                 #Speichern des gewürfelten Wertes in einem Dictionary
    d[az]=d[az]+1
    return d                        #Rückgabe des aktualisierten Dictionaries

def prozent(d):
    n=sum(d.values())               #bestimme wie oft gewürfelt wurde
    dp={}                           #erzeuzge ein neues dictionary in welchem die Prozentwerte gespeichert werden
    for i in range(2,13,1):
        dp[i]=round(d[i]/float(n)*100,2)    #runde das Produkt aus z/n*100% auf die zweite Nachkomastelle 
    return dp                       #Rückgabe des Dictionaries mit den Prozentwerten

def graph(d):
    x=range(2,13,1)
    y=list(d.values())
    plt.xlabel('Augenzahl')
    plt.ylabel('Anteil in %')
    plt.bar(x,y)
    plt.show()        

"""-----------Methodenaufruf/Ausgabe----------------------------"""
while n!=0:
    az = wuerfeln()
    d = speicher(az,d)
    n=n-1
print d

dp=prozent(d)
print dp

"""----------Graphische Ausgabe---------------------------------"""

graph(dp)
vote_ok
von jigga (4260 Punkte) - 18.05.2015 um 12:40 Uhr
Quellcode ausblenden Python-Code
import random
random.seed()
liste_erg = [0,0,0,0,0,0,0,0,0,0,0,0]

z = input("Anzahl Wuerfe: ")
anzahl = int(z)
print()

for i in range(anzahl):
	w1 = random.randint(1,6)
	w2 = random.randint(1,6)
	summe = w1 + w2
	liste_erg[summe-1] += 1
	#ohne Ausgabe viel performanter (also auskommentieren)
	print(str(i+1) + ". Wurf: " + str(w1) + " und " + str(w2) + " - Summe " + str(summe))

print()

print("Ergebnis:")

for i in range(1,13):
	print("{0:2} - {1:2.0f}%".format(i, round(100*liste_erg[i-1]/anzahl,2)))
vote_ok
von Nachbar (2820 Punkte) - 17.08.2016 um 21:48 Uhr
Quellcode ausblenden Python-Code
# -*- coding: utf-8 -*-

from random import randint

eingabe = input("Wie oft soll gewuerfelt werden? ")
x = 1
summen = {2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0}

while x <= eingabe:
    w1 = randint(1, 6)
    w2 = randint(1, 6)
    summe = w1 + w2
    summen[summe] = summen[summe] + 1
    print str(x) + ". Wurf: " + str(w1) + " und " + str(w2) + " - " + str(summe)
    x = x + 1
    
print "\nProzentuale Verteilung der gewuerfelten Summen:\n"

for i in range(2, 13):
    prozent = summen[i] * 100 / eingabe
    print "Summe " + str(i) + ":\t" + str(prozent) + "%"
vote_ok
von Kotgreifer (1100 Punkte) - 22.01.2020 um 13:57 Uhr
Quellcode ausblenden Python-Code
import random

wiederholungen = 1000000
erg=[0,0,0,0,0,0,0,0,0,0,0,0]

for i in range(1,wiederholungen):
    erg[random.choice(range(1,7))+random.choice(range(1,7))-1]+=1

erg.pop(0)
for j in range(0,len(erg)):
    print(str(j+2)+": "+str((erg[j]/wiederholungen)*100)+"%")