Quick actions

cmd+k|ctrl+k

Navigation

Languages

Zufallszahlen in Python

Snippet info

Language

Python

Visibility

public

Author

gerold

Created

2019-07-12T07:55:40Z

Updated

2019-07-15T19:28:37Z

#!/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()

INFO