Python Basic Fŕage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
texaycode
User
Beiträge: 2
Registriert: Montag 18. März 2019, 20:44

Ich habe ein Problem, ich habe probiert ein Münzewerfen spiel zu programmieren, allerdings habe ich irgendwo ein fehler das sich der anfang immer wiederholt:

Code: Alles auswählen

import random
import time
moeglichkeiten = ("Kopf", "Zahl")
player_money = int(1000)
player_einsatz = int(0)
player_choice = 0
random_choice = 0
print(f"Hallo spieler, hier kannst du Kopf oder Zahl spielen. Du hast momentan ${player_money}. ")
while player_money > 0:
    player_choice = input("Auf was willst du wetten [K]opf oder [Z]ahl?: ")
    player_einsatz = int(input(f"Wie viel willst du auf {player_choice} setzen, momentan hast du ${player_money}: "))
    random_choice = random.choice(moeglichkeiten)
    if player_choice == random_choice:
        player_money + player_einsatz
        print(f"Super, du hast gewonenn jetzt hast du ${player_money}!")
    else:
        player_money - player_einsatz
else:
    print("Du hast kein geĺd mehr das nächste mal vlt.")
    time.sleep(5)
    exit()
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

das Ergebnis einer Rechnung sollte man auch wieder einer Variable zuweisen, wie Du es an 8 anderen Stellen auch tust.
Ein else-Block bei einer while-Schleife ohne break ist verwirrend. die vorletzten beiden Zeile sollten ausgerückt sein und die letzte gelöscht werden, weil sich das Programm sowieso am Ende beendet.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

Na ja, du merkst dir das Ergebnis deiner Berechnungen nicht; die Bedingung ist immer erfüllt und dann läuft das Skript natürlich endlos weiter.
Die int() Aufrufe in Zeile 4 und 5 werden nicht benötigt, wie du in den beiden Zeilen darunter ja sehen kannst ;) Weshalb sind die Variablen Namen teilweise Deutsch, teils gemischt? Nimm doch eine Sprache, bevorzugt Englisch. 'exit' wird nicht funktionieren, da du es nicht importierst. Du brauchst es dort aber eh nicht.
texaycode
User
Beiträge: 2
Registriert: Montag 18. März 2019, 20:44

Also ich glaube ich habe jetzt die fehler behoben allerdings habe ich jetzt das problem das wenn ich prüfe ob die eingabe Zahl oder Kopf entspricht, ich immer gesagt bekomme das es keines vom beiden ist:

Code: Alles auswählen

import random
import time

possibilities = ("Kopf", "Zahl")
player_money = 1000
player_bet = 0
player_choice = 0
random_choice = 0
print(f"Hallo spieler, hier kannst du Kopf oder Zahl spielen. Du hast momentan ${player_money}. ")
while player_money > 0:
    player_choice = input("Auf was willst du wetten Kopf oder Zahl?: ")
    if player_choice != "Zahl" or "Kopf":
         print("Du kannst nicht auf etwas wetten was es nicht gibt!")
         time.sleep(2.5)
         exit()
    player_bet = int(input(f"Wie viel willst du auf {player_choice} setzen, momentan hast du ${player_money}: "))
    random_choice = random.choice(possibilities)
    if player_bet > player_money:
        print("Du kannst nicht mehr wetten als du hast!")
        time.sleep(2.5)
        exit()
    else:
        pass

    if player_choice == random_choice:
        player_money += player_bet
        print(f"Super, du hast gewonenn jetzt hast du ${player_money}!")
    else:
        player_money -= player_bet
else:
    print("Du hast kein geĺd mehr das nächste mal vlt.")
    time.sleep(5)


nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

Das liegt daran, dass deine Bedingung 'if player_choice != "Zahl" or "Kopf":' leider falsch formuliert ist. Du orientierst dich daran, wie man das in natürlicher Sprache formulieren würde, in Python funktioniert das so aber nicht. Es wird geprüft, ob die Variable player_choice ungleich dem Wert 'Zahl' ist oder auf den Wahrheitswert der Zeichenkette "Kopf'. Da der Wahrheitswert von allen Zeichenketten außer der leeren immer 'True' ist steht dort also 'if player_choice != "Zahl" or True', was immer 'True' ergibt. Statt dessen würde man eher so etwas schreiben:

Code: Alles auswählen

if player_choice.lower() not in {'zahl', 'kopf'}:
    ....
Um aus einer Schleife auszubrechen, verwendet man 'break'. 'exit' braucht man in regulären Programmen eigentlich eher selten, und wenn, dann um einen bestimmten return-Code zu setzen.
Antworten