Python :: Aufgabe #110 :: Lösung #1

5 Lösungen Lösungen öffentlich
#110

Gute Wette oder schlechte Wette?

Anfänger - Python von hollst - 23.06.2016 um 19:12 Uhr
Ich finde, eine interessante Aufgabenstellung sollte immer mit einer kleinen Geschichte verbunden sein. Ansonsten wird die Aufgabenstellung in der Allgemeinheit mit "rein theoretische" oder "für das Leben uninteressant" abgestempelt. Nun gut, die Mathematik fragt nicht danach, ob irgendeine Aufgabenstellung für das Leben "interessant" ist, für sie sollte eine Aufgabenstellung "an sich" interessant sein, unabhängig vom paktischen Wert. Aber lassen wir das Philosphieren beiseite und kommen zu der Geschichte:

Du hast einen spielsüchtigen Mitbürger getroffen, nennen wir ihn den Banker. Nach einiger Zeit schlägt dir der Banker ein einfaches Würfelspiel vor: du gewinnst, wenn eine gerade Zahl fällt, er, wenn eine ungerade Zahl gefallen ist. Du bist nicht spielsüchtig und erwiders, dass du an einem solchen Spiel, bei dem die Chancen 50 zu 50 stehen, kein Interesse hast. Gewinnen tut nur der, der mehr Glück hat und auf so etwas vertraust du nicht.

Der Banker bleibt hartnäckig. Er schlägt dir vor, dass du nicht nur gewinnst beim Fallen einer geraden Zahl, sondern zusätzlich, wenn die Eins fällt. Hiermit bist du einverstanden, denn deine Chancen sind mit etwa 67 zu 33 wesentlich besser. Doch der Banker sagt: "Halt! Mir ist natürlich klar, dass Du in diesem Fall die bessere Position hast. Als Ausgleich bekommst du im Falle eines Gewinnes aber auch nur 4/6 der Tischgeldes ausgezahlt, der Rest geht an mich zurück." Deine Antwort: "Na, dann sind wir ja wieder wie zu Beginn, ich habe kein Interesse."

Der Banker bleibt am Ball: "Okay, im Falle eines Gewinnes bekommst du nicht nur 66,666... % sondern sogar 70 % des Tischgeldes. Den kleinen Nachteil werde ich mit meinem glücklicheren Händchen schon wieder ausgleichen." Gut, das ist dir plausibel und das Spile geht los.

Jetzt zur Aufgabenstellung: Ist es in der Tat wahr, dass du mit den 70 % (leicht) im Vorteil gegenüber dem Banker bist? Zur Beantwortung der Frage gibt es im Prinzip zwei Wege, den experimentellen und den theoretischen. Wir wollen den experimentellen Weg wählen (Simulation). Sowohl du als auch der Banker haben in jeder Runde ein Grundgeld von 100 €. Der Einsatz bei jeder Würfelung sein 1 € und eine Runde geht über 100 Würfe (somit brauchst du im dümmsten Fall, falls du wirklich jeden der 100 Würfe einer Runde verlieren solltest, trotzdem keine Bankrotterklärung abgeben). Die Frage lautet: Wie oft hast du im Mittel am Ende einer 100-Würfe-Runde mehr als deine 100-€-Startgeldmenge auf deiner Seite?

PS: Falls dir dein Simulationsergebnis irgendwie komisch vorkommt, versuche doch durch Überlegung (theoretischer Weg) herauszubekommen, ob deine Simulation nicht doch richtig sein könnte.


#1
vote_ok
von AnnaIhrs (460 Punkte) - 05.07.2016 um 00:24 Uhr
Quellcode ausblenden Python-Code
#!/usr/bin/python3
# -*- encoding: utf-8 -*-
#
#>>>autor:      Sebastian Müller
#>>>licence:    GPL
#>>>contact:    mypythonmueller@gmail.com
#

#Programm nach folgender Aufgabenstellung:

#Ich finde, eine interessante Aufgabenstellung sollte immer mit einer kleinen
#Geschichte verbunden sein. Ansonsten wird die Aufgabenstellung in der
#Allgemeinheit mit "rein theoretische" oder "für das Leben uninteressant"
#abgestempelt. Nun gut, die Mathematik fragt nicht danach, ob irgendeine
#Aufgabenstellung für das Leben "interessant" ist, für sie sollte eine
#Aufgabenstellung "an sich" interessant sein, unabhängig vom paktischen Wert.
#Aber lassen wir das Philosphieren beiseite und kommen zu der Geschichte:

#Du hast einen spielsüchtigen Mitbürger getroffen, nennen wir ihn den Banker.
#Nach einiger Zeit schlägt dir der Banker ein einfaches Würfelspiel vor: du
#gewinnst, wenn eine gerade Zahl fällt, er, wenn eine ungerade Zahl gefallen
#ist. Du bist nicht spielsüchtig und erwiders, dass du an einem solchen Spiel,
#bei dem die Chancen 50 zu 50 stehen, kein Interesse hast. Gewinnen tut nur der,
#der mehr Glück hat und auf so etwas vertraust du nicht.

#Der Banker bleibt hartnäckig. Er schlägt dir vor, dass du nicht nur gewinnst
#beim Fallen einer geraden Zahl, sondern zusätzlich, wenn die Eins fällt.
#Hiermit bist du einverstanden, denn deine Chancen sind mit etwa 67 zu 33
#wesentlich besser. Doch der Banker sagt: "Halt! Mir ist natürlich klar, dass
#Du in diesem Fall die bessere Position hast. Als Ausgleich bekommst du im Falle
#eines Gewinnes aber auch nur 4/6 der Tischgeldes ausgezahlt, der Rest geht an
#mich zurück." Deine Antwort: "Na, dann sind wir ja wieder wie zu Beginn, ich
#habe kein Interesse."

#Der Banker bleibt am Ball: "Okay, im Falle eines Gewinnes bekommst du nicht
#nur 66,666... % sondern sogar 70 % des Tischgeldes. Den kleinen Nachteil
#werde ich mit meinem glücklicheren Händchen schon wieder ausgleichen." Gut, das
#ist dir plausibel und das Spile geht los.

#Jetzt zur Aufgabenstellung: Ist es in der Tat wahr, dass du mit den 70 %
#(leicht) im Vorteil gegenüber dem Banker bist? Zur Beantwortung der
#Frage gibt es im Prinzip zwei Wege, den experimentellen und den theoretischen.
#Wir wollen den experimentellen Weg wählen (Simulation). Sowohl du als auch der
#Banker haben in jeder Runde ein Grundgeld von 100 €. Der Einsatz bei jeder
#Würfelung sein 1 € und eine Runde geht über 100 Würfe (somit brauchst du im
#dümmsten Fall, falls du wirklich jeden der 100 Würfe einer Runde verlieren
#solltest, trotzdem keine Bankrotterklärung abgeben). Die Frage lautet: Wie
#oft hast du im Mittel am Ende einer 100-Würfe-Runde mehr als deine 100-€-
#Startgeldmenge auf deiner Seite?

#PS: Falls dir dein Simulationsergebnis irgendwie komisch vorkommt, versuche
#doch durch Überlegung (theoretischer Weg) herauszubekommen, ob deine
#Simulation nicht doch richtig sein könnte.

#!!!!! Die Frage lautet: Wie
#!!!!! oft hast du im Mittel am Ende einer 100-Würfe-Runde mehr als deine 100-€-
#!!!!! Startgeldmenge auf deiner Seite?

print("""Simulationsprogramm für Gewinnausschüttung, bei einer Gewinnaufteilung von:
2:4 mit 100% Gewinn ("Banker") gegen 4:2 bei 70% Gewinn ("Ich").
Simuliert werden Durchgänge á 100 Würfe mit einem Einsatz von 1Euro, also einer
Gewinnmarge von 2Euro bzw. 1,40Euro zu 0,70Euro.""")

runden = 0
while not runden:
    try:
        print("Bitte die gewünschte Anzahl an simulierten Runden eingeben,")
        runden = int(input("mindestens 20 maximal 9.999.999 (Das sollte als"
        "Simulation genügen ;) >>> "))
        if runden < 20:
            raise RuntimeError("Zahl leider zu klein.")
        elif runden > 9999999:
            RuntimeError("Zahl leider zu groß")
    except ValueError:
        print("Eingabe war leider keine ganze Zahl.")
    except RuntimeError as e:
        print(e)
        runden = 0

gesammt = 0
print()
print()
for ganzerunden in range(1, runden + 1):
    banker = 100
    ich = 100
    frunden = len(str(runden))
    import random
    random.seed()
    for i in range(100):
        wuerfel = random.randint(1, 6)
        gewinn = (1, 2, 4, 6)
        if wuerfel in gewinn:
            banker -= 0.4
            ich += 0.4
        else:
            banker += 1
            ich -= 1
    gesammt = gesammt + ich - 100
    if len(str(runden)) == 2:
        vorlauf = ("{0:12} {1:2}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:36} {1:<8} {2:8.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:36} {1:<8} {2:8.2f}€".format("", "Ich:", ich))
        print("{0:36} {1:<8} {2:8.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>55}".format(""))
    elif  len(str(runden)) == 3:
        vorlauf = ("{0:12} {1:3}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:37} {1:<8} {2:9.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:37} {1:<8} {2:9.2f}€".format("", "Ich:", ich))
        print("{0:37} {1:<8} {2:9.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>57}".format(""))
    elif  len(str(runden)) == 4:
        vorlauf = ("{0:12} {1:4}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:38} {1:<8} {2:10.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:38} {1:<8} {2:10.2f}€".format("", "Ich:", ich))
        print("{0:38} {1:<8} {2:10.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>59}".format(""))
    elif  len(str(runden)) == 5:
        vorlauf = ("{0:12} {1:5}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:39} {1:<8} {2:11.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:39} {1:<8} {2:11.2f}€".format("", "Ich:", ich))
        print("{0:39} {1:<8} {2:11.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>61}".format(""))
    elif  len(str(runden)) == 6:
        vorlauf = ("{0:12} {1:6}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:40} {1:<8} {2:12.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:40} {1:<8} {2:12.2f}€".format("", "Ich:", ich))
        print("{0:40} {1:<8} {2:12.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>63}".format(""))
    else:
        vorlauf = ("{0:12} {1:7}. {2:15}".format("Ergebnis der", ganzerunden, "Runde:"))
        print("{0:41} {1:<8} {2:13.2f}€".format(vorlauf, "Banker:", banker))
        print("{0:41} {1:<8} {2:13.2f}€".format("", "Ich:", ich))
        print("{0:41} {1:<8} {2:13.2f}€".format("Kontostand insgesammt:",
        "Ich:", gesammt))
        print("{0:.>65}".format(""))


Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben