Das Pythonprogramm, das ich verwendet habe, um die Gelingenswahrscheinlichkeiten zu bestimmen:
#
# Zaehlschleife
#
def counter(Liste_1):
aktuelleListe = [1] * len(Liste_1)
last_index = len(Liste_1) - 1
while True:
yield list(aktuelleListe)
i = last_index
aktuelleListe[i] += 1
while aktuelleListe[i] > Liste_1[i]:
aktuelleListe[i] = 1
i -= 1
if i < 0:
raise StopIteration()
aktuelleListe[i] += 1
#
#
#
for Wuerfelzahl in range(1,5,1): # deckt die Wuerfelzahl ab
AuswDatei = open("Varianzausw05.txt", "a")
AuswDatei.write("Wuerfelzahl: " + str(Wuerfelzahl) + "\n")
AuswDatei.close()
Wuerfelseitenzahl = 20
Liste_1 = [Wuerfelseitenzahl] * Wuerfelzahl
for TaW in range(-2,5): # deckt die Talentwerte ab
for Eigenschaftswerte in range(9,16,3): # deckt die Eigenschaftswerte 9, 12, 15 ab
Eigenschaften = [Eigenschaftswerte] * Wuerfelzahl
# Zaehler zuruecksetzen:
GeschaffteProben = 0
NichtGeschaffteProben = 0
# falls noetig, Liste fuer ueberbehaltene Talentpunkte anlegen:
if TaW > 0: # wenn der Talentwert positiv ist,
RestlicheTalentpunkte = [0]*((TaW*Wuerfelzahl)+1) # koennen Talentpunkte ueberbleiben
else: # andernfalls
RestlicheTalentpunkte = [] # nicht
# dann wird eine neue Wuerfelkombination geholt und bearbeitet:
for Probenwurf in counter(Liste_1):
geschafft = "unbekannt" # ob die Probe als geschafft gilt, ist noch offen,
RestTaW = TaW*Wuerfelzahl # aber der Talentwert steht voll zur Verfuegung
# jetzt werden die Wuerfel mit den Eingeschaften verglichen:
Resultatliste = [0] * Wuerfelzahl
for Wuerfelnummer in range(len(Probenwurf)):
Resultatliste[Wuerfelnummer] = Eigenschaften[Wuerfelnummer] - Probenwurf[Wuerfelnummer]
# und es wird geprueft, ob die Probe geschafft ist
if RestTaW >= 0: # fangen wir mit einem "positiven" TaW an
for Einzelresultat in Resultatliste: # fuer jedes Resultat wird geprueft:
if Einzelresultat < 0: # muss der Talentwert eingesetzt werden?
RestTaW = RestTaW + Einzelresultat # wenn ja, sinkt er
if RestTaW >= 0: # wenn zum Schluss der TaW noch mindestens 0 ist,
geschafft = "ja" # ist die Probe geschafft
if len(RestlicheTalentpunkte) > 0: # wenn Talentpunkte ueberbleiben koennen:
RestlicheTalentpunkte[RestTaW] = RestlicheTalentpunkte[RestTaW] + 1
else: # andernfalls
geschafft = "nein" # eben nicht...
else: # jetzt kommen die negativen Talentwerte
for Einzelresultat in Resultatliste: # wieder werden die Einzelresultate durchgegangen
if Einzelresultat < 0: # falls eines negativ ist,
geschafft = "nein" # ist die Probe jedenfalls nicht geschafft
if geschafft == "unbekannt": # wenn es noch moeglich ist, die Probe zu bestehen,
for Einzelresultat in Resultatliste: # werden die Einzelresultate durchgegangen
RestTaW = RestTaW + Einzelresultat # und zu dem Talentwert addiert;
if RestTaW < 0: # wenn er danach immer noch negativ ist,
geschafft = "nein" # ist die Probe danebengegangen,
else: # andernfalls
geschafft = "ja" # ist sie geschafft
# Zaehler hochsetzen:
if geschafft == "ja":
GeschaffteProben = GeschaffteProben + 1
else:
NichtGeschaffteProben = NichtGeschaffteProben + 1
# nach dem Durchgehen aller Wuerfelkombinationen:
Probenzahl = NichtGeschaffteProben + GeschaffteProben
if Probenzahl == Wuerfelseitenzahl**Wuerfelzahl:
pass
else:
print "??"
Prozent_geschafft = int(float(GeschaffteProben)*100/float(Probenzahl))
# und eine Dateizeile schreiben:
Einzelauswertung = ["E: ", Eigenschaftswerte, "TaW: ", TaW*Wuerfelzahl, "Probz: ", Probenzahl, "Prozent_geschafft: ", Prozent_geschafft, "Njet: ", NichtGeschaffteProben,
"Jep: ", GeschaffteProben, "mit: ", RestlicheTalentpunkte]
DateiZeile = repr(Einzelauswertung)
AuswDatei = open("Varianzausw06.txt", "a")
AuswDatei.write(DateiZeile+"\n")
AuswDatei.close()