ich hab vor kurzen mit Python als zweite Sprache nach Java angefangen und mein erstes kleines Programm läuft nach einigem Hin und Her auch endlich. Aber ich bin noch nicht so ganz zufrieden und glaub, das geht auch schöner. Da es leider recht schwierig ist, den eigenen funktionierenden Code zu verbessern, insbesondere als Frischling, hab ich mir gedacht, zeig ich mein Erstlingswerk mal einem versierten Publikum.
Zum Problem: es geht um eine kurze Würfelsimulation. Man hat X(=dices) Würfel, und bei einer 6 darf man noch einmal Würfeln, und alle Augen zusammenzählen [dicer]
Zur statistischen Auswertung wird die so generierte Liste nach gezeigter Augenanzahl neusortiert [lister], und in Prozente umgerechnet [percenteger].
Um das ganze dann statistisch aufzubereiten, wird das mehrmalige Aufrufen mit rounder(iterations,dices) gleich mitgeliefert.
rounder(20,8) liefert also eine liste die bei 1 beginnend die Wahrscheinlichkeit der Augenanzahl bei 20 durchläufen anzeigt.
negative Eingaben und ähnlichen Krimskrams hab ich noch nich reingetan - quasi Coder-only Programm
Also stürzt euch drauf, und zeigt, dass ihr es schöner könnt!
insbesondere die for-Schleifen über Listen und das addieren von Listenelementen geht wohl schöner.
Gruß und Danke im Vorraus - Froc
Code: Alles auswählen
import random
def dicer(dices):
#throws 6sided dices,
#and when a six shows up, rolls again with that dice,
#adding the outcome
dicelist=[]
for i in range(dices):
n=random.randint(1,6)
dicelist.append(n)
for i in range(len(dicelist)):
lower=6
while dicelist[i]==lower:
dicelist[i]=dicelist[i]+random.randint(1,6)
lower=lower+6
return dicelist
def lister(dicelist):
#gets a outcome list from dicer
#and gives a list, with the the shown added eyes
#[4,5,6] will mean: 4 rolls with 1 eye - 5 rolls with 2 eyes, 6 rolls with 3 eyes
eyelist=[]
for i in range(max(dicelist)):
eyelist.append(0)
for j in range(len(dicelist)):
eyelist[dicelist[j]-1]=1+eyelist[dicelist[j]-1]
return eyelist
def percenteger(liste):
#normalices the appereances of rolls
#[1,2,3] will give: [1/6, 1/3, 1/2]in floating
outlist=[]
for i in liste:
outlist.append(float(i)/float(sum(liste)))
return outlist
def rounder(count, dices):
#multiple iterations of the three programms above
#to show statistic appereances with same amount of dices
outlist=[]
boxlist=[]
maximum=0
for i in range(count):
a=percenteger(lister(dicer(dices)))
while maximum<len(a):
maximum=maximum+1
outlist.append(0.0)
boxlist.append(a)
for i in range(len(boxlist)):
for j in range(len(boxlist[i])):
outlist[j]=boxlist[i][j]+outlist[j]
for i in range(len(outlist)):
outlist[i]=outlist[i]/count
return outlist