#!/usr/bin/env python3
# coding: utf-8
import random
# Durchläufe
DURCHLAEUFE = 30
# Runde: Einsatz €
RUNDENEINSAETZE = {
1: 1,
2: 2,
3: 3,
4: 5,
5: 8,
6: 12,
7: 18,
8: 27,
9: 41,
10: 62,
11: 93,
12: 140,
13: 210,
14: 315,
15: 473,
16: 710,
17: 1065,
18: 1598,
19: 2397,
20: 3596,
21: 4782,
22: 6360,
23: 8458,
24: 11250,
25: 14962,
}
# Anzahl Runden bevor die Runde abgebrochen wird
MAX_RUNDEN_VOR_RUNDENABBRUCH = 14
DRITTEL = {
1: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},
2: {13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24},
3: {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36},
}
def get_startkapital():
"""
Gibt zurück wieviel Startkapital du brauchst
"""
startkapital = 0
for i in range(MAX_RUNDEN_VOR_RUNDENABBRUCH):
startkapital += RUNDENEINSAETZE[i + 1]
# Fertig
return startkapital
def get_gewinnzahl():
"""
Gibt die neue Gewinnzahl zurück
"""
return random.randint(0, 36)
def get_gewonnenes_drittel(zahl):
"""
Gibt das gewonnene Drittel oder 0 zurück
"""
for i in range(3):
if zahl in DRITTEL[i + 1]:
return i + 1
return 0
def setze_drittel(gewonnene_drittel):
"""
Gibt das Drittel zurück das in der neuen Runde gesetz werden soll.
Bedingung: Es wurde gewonnen oder noch nicht gespielt.
"""
# Prüfen ob bereits gesetzt wurde.
if not gewonnene_drittel:
# Zufallszahl zurück geben
return random.randint(1, 3)
# Drittel ermitteln
moegliche_drittel = [1, 2, 3]
for drittel in reversed(gewonnene_drittel):
# Letzten beiden Zahlen nie verwenden
if drittel in moegliche_drittel:
moegliche_drittel.remove(drittel)
if len(moegliche_drittel) == 1:
return moegliche_drittel[0]
def kalkuliere_rundenset(kapital):
"""
Hauptfunktion
"""
einsatz = 0
gewonnene_drittel = []
for i in range(MAX_RUNDEN_VOR_RUNDENABBRUCH):
runde = i + 1
rundeneinsatz = RUNDENEINSAETZE[runde]
einsatz = einsatz + rundeneinsatz
# Drittel setzen
gesetztes_drittel = setze_drittel(gewonnene_drittel)
# Gewinnzahl und Drittel ermitteln
gewinnzahl = get_gewinnzahl()
gewinndrittel = get_gewonnenes_drittel(gewinnzahl)
gewonnene_drittel.append(gewinndrittel)
# Ermittel ob gewonnen
gewonnen = gesetztes_drittel == gewinndrittel
# GEWONNEN
if gewonnen:
# Gewinn ermitteln
gewinn = rundeneinsatz * 3
# print("GEWONNEN")
# Fertig
kapital = kapital - einsatz + gewinn
return kapital
else:
# Abbruch, weil in keiner Runde gewonnen wurde.
# print("Abbruch, weil in keiner Runde gewonnen wurde")
# Fertig
kapital = kapital - einsatz
return kapital
def main():
"""
Hauptfunktion
"""
kapital = altes_kapital = startkapital = get_startkapital()
for i in range(DURCHLAEUFE):
kapital = kalkuliere_rundenset(kapital)
print(kapital, kapital - altes_kapital)
altes_kapital = kapital
print("Startkapital:", startkapital)
print("Ergebnis:", kapital - startkapital)
print("Kontostand:", startkapital + (kapital - startkapital))
if __name__ == "__main__":
main()