Roulette Spiel

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
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Servus leute,
Ich habe mir eure Tipps zu Herzen genommen und habe mir die set's angeguckt und ein paar Übungen dazu gemacht.

Ich habe ein Roulette Spiel programmiert, wo man auf eine Zahl, Art, Farbe, oder auf die Höhe tippen kann.
Der Programmierstil ist warscheinlich immernoch nicht der Beste deshalb will ich fragen wie ich dieses Programm verbessern kann.
Meine zweite Frage ist: Ich möchte, dass wenn das Spiel zu Ende ist, dass Programm wieder neu startet, weil ich jetzt Coins mit einfügen will. Dann kann man immer mit einer bestimmten Anzahl an Coins setzen und diese dann verlieren oder vermehren aber dafür darf das Programm erst beendet werden, wenn man dies will. Ich hoffe ich habe mich diesesmal gut ausgedrückt :P

Hier mein Code:

Code: Alles auswählen

#!/usr/bin/python3
import random
zahl = random.randint(0,36)
redNumbers = set([1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36])
even = set()
odd = set()
red = set()
black = set()
low = set()
high = set()

if zahl != 0:
    if zahl % 2 == 0:
        red.add(zahl)
        art = "gerade"
    if zahl % 2 != 0:
        black.add(zahl)
        art = "ungerade"
    if zahl in redNumbers:
        farbe = "rot"
    if zahl not in redNumbers:
        farbe = "schwarz"
    if zahl <= 18:
        low.add(zahl)
        höhe = "niedrig"
    if zahl > 18:
        high.add(zahl)
        höhe = "hoch"

print("Willkommen zu Roulette! Wie möchten sie setzen?\n")
print("1. Auf eine Zahl\n"
      "2. Auf gerade / ungerade\n"
      "3. Auf eine Farbe\n"
      "4. Auf niedrig / hoch\n")
auswahl = int(input())
if auswahl == 1:
    gewählte_zahl = int(input("Auf welche Zahl möchten Sie setzen: "))
    if gewählte_zahl == zahl:
        print("Glückwunsch sie haben die Zahl erraten!!!")
    else:
        print("Sie haben die Zahl leider nicht erraten.")
if auswahl == 2: 
    gewählte_art = input("Auf welche Art möchten Sie setzen: ")
    if gewählte_art == art :
        print("Sie haben die Art richtig erraten!!!")
    else:
        print("Sie haben die Art leider nicht richtig erraten.")
if auswahl == 3:
    gewählte_farbe = input("Auf welche Farbe möchten sie setzen: ")
    if gewählte_farbe == farbe:
        print("Sie haben die Farbe richtig erraten!!!")
    else:
        print("Sie haben die Farbe leider nicht richtig erraten")

        
print("{0}   |   {1}   |   {2}   |   {3}".format(zahl, art, farbe, höhe))

Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@nfehren: ich sehe bei Deinem Programm keinen Sinn darin, Sets zu benutzen, da Du sowieso immer nur ein Element hinzufügst. Die Kategorisierung der Zahl solltest Du in eine Funktion auslagern und den ganzen Rest in eine main-Funktion. Es gibt "else" das genau dann ausgeführt wird, wenn die if-Bedingung nicht erfüllt wird, Du hast immer zwei if-Abfragen mit Bedingung A und Gegenteil der Bedingung A.
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Sirius3 hat geschrieben:@nfehren: ich sehe bei Deinem Programm keinen Sinn darin, Sets zu benutzen, da Du sowieso immer nur ein Element hinzufügst. Die Kategorisierung der Zahl solltest Du in eine Funktion auslagern und den ganzen Rest in eine main-Funktion. Es gibt "else" das genau dann ausgeführt wird, wenn die if-Bedingung nicht erfüllt wird, Du hast immer zwei if-Abfragen mit Bedingung A und Gegenteil der Bedingung A.
klar es war nicht zwingend nötig sets zu benutzen aber weil ich ja genau diese üben wollte hab ichs gemacht.
BlackJack

@nfehren: Aber wenn die Verwendung sinnlos ist, dann hast Du doch gar nichts dabei gelernt‽ Bis auf `redNumbers` wird auch gar keines der `set`-Objekte tatsächlich verwendet.

BTW: Das Programm kann nicht damit umgehen wenn die 0 gezogen wird.
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

BlackJack hat geschrieben:@nfehren: Aber wenn die Verwendung sinnlos ist, dann hast Du doch gar nichts dabei gelernt‽ Bis auf `redNumbers` wird auch gar keines der `set`-Objekte tatsächlich verwendet.

BTW: Das Programm kann nicht damit umgehen wenn die 0 gezogen wird.
Naya ich hab zwar kein nutzen auf die sets (bis auf redNumbers) aber da es funktioniert hab ichs ja hinbekommen auch wenn ichs eigentlich weg lassen kann, was ich warscheinlich auch mache jetzt wos ja klappt.

Habe jetzt die Coins eingeführt:

Code: Alles auswählen

#!/usr/bin/python3
import random
coins = 50
print("Willkommen zu Roulette! Sie haben anfangs 50 Coins! Wie möchten sie setzen?\n")
while coins is not 0:
    zahl = random.randint(0,36)
    redNumbers = set([1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36])
    even = set()
    odd = set()
    red = set()
    black = set()
    low = set()
    high = set()
    
    if zahl != 0:
        if zahl % 2 == 0:
            red.add(zahl)
            art = "gerade"
        if zahl % 2 != 0:
            black.add(zahl)
            art = "ungerade"
        if zahl in redNumbers:
            farbe = "rot"
        if zahl not in redNumbers:
            farbe = "schwarz"
        if zahl <= 18:
            low.add(zahl)
            höhe = "niedrig"
        if zahl > 18:
            high.add(zahl)
            höhe = "hoch"
    else:
        print("Wow es war die NULL!!!!")

    print("1. Auf eine Zahl\n"
          "2. Auf gerade / ungerade\n"
          "3. Auf eine Farbe\n"
          "4. Auf niedrig / hoch\n")
    auswahl = int(input())
    einsatz = int(input("Wie viele Coins möchten sie setzen (Sie haben {0} Coins): ".format(coins)))
    if auswahl == 1:
        gewählte_zahl = int(input("Auf welche Zahl möchten Sie setzen: "))
        if gewählte_zahl == zahl:
            print("Glückwunsch sie haben die Zahl erraten!!!")
            coins = coins + einsatz * 36
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
        else:
            print("Sie haben die Zahl leider nicht erraten.")
            coins -= einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
    if auswahl == 2: 
        gewählte_art = input("Auf welche Art möchten Sie setzen: ")
        if gewählte_art == art :
            print("Sie haben die Art richtig erraten!!!")
            coins = coins + einsatz 
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
        else:
            print("Sie haben die Art leider nicht richtig erraten.")
            coins -= einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
    if auswahl == 3:
        gewählte_farbe = input("Auf welche Farbe möchten sie setzen: ")
        if gewählte_farbe == farbe:
            print("Sie haben die Farbe richtig erraten!!!")
            coins = coins + einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
        else:
            print("Sie haben die Farbe leider nicht richtig erraten")
            coins -= einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
    if auswahl == 4:
        gewählte_höhe = input("Niedrig oder tief?: ")
        if gewählte_höhe == höhe:
            print("Sie haben die Höhe erraten!!!")
            coins = coins + einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
        else:
            print("Sie haben die Höhe leider nicht richtig erraten.")
            coins -= einsatz
            print("Sie haben jetzt {0} Coins!\n\n".format(coins))
    
    print("{0}   |   {1}   |   {2}   |   {3}\n".format(zahl, art, farbe, höhe))

print("Danke fürs Spielen, bis zum nächsten mal!")
Edit: Fehler bei zahl == 0 entdeckt: Zahl ist nicht gerade / ungerade, rot / schwarz
BlackJack

@nfehren: Die Bedingung in der ``while``-Schleife ist fehlerhaft. ``is`` und ``is not`` prüfen auf die Objektindentität und nicht auf den Wert. Es könnte durchaus zwei verschiedene Objekte mit dem Wert 0 geben und dann bricht die Schleife niemals ab.

Da Du ausserdem nicht überprüfst ob der Spieler überhaupt so viele Münzen hat wie er einsetzen möchte, kann man auch leicht ins negative rutschen, dann aber mit Schulden problemlos weiterspielen.

Insgesamt werden die Benutzereingaben zu wenig überprüft.

Die Zeile ``print("Sie haben jetzt {0} Coins!\n\n".format(coins))`` kommt viel zu oft vor. Dieser Satz wird doch eigentlich nach jedem Spielzug ausgegeben, also muss man den auch nur an *einer* Stelle im Quelltext haben, eben nachdem der Spielzug gemacht wurde.

Bevor es noch umfangreicher wird, fang am besten mal an das ganze in eine Hauptfunktion zu stecken und dann den Code daraus sinnvoll auf Funktionen aufzuteilen.
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

BlackJack hat geschrieben:@nfehren: Die Bedingung in der ``while``-Schleife ist fehlerhaft. ``is`` und ``is not`` prüfen auf die Objektindentität und nicht auf den Wert. Es könnte durchaus zwei verschiedene Objekte mit dem Wert 0 geben und dann bricht die Schleife niemals ab.

Da Du ausserdem nicht überprüfst ob der Spieler überhaupt so viele Münzen hat wie er einsetzen möchte, kann man auch leicht ins negative rutschen, dann aber mit Schulden problemlos weiterspielen.

Insgesamt werden die Benutzereingaben zu wenig überprüft.

Die Zeile ``print("Sie haben jetzt {0} Coins!\n\n".format(coins))`` kommt viel zu oft vor. Dieser Satz wird doch eigentlich nach jedem Spielzug ausgegeben, also muss man den auch nur an *einer* Stelle im Quelltext haben, eben nachdem der Spielzug gemacht wurde.

Bevor es noch umfangreicher wird, fang am besten mal an das ganze in eine Hauptfunktion zu stecken und dann den Code daraus sinnvoll auf Funktionen aufzuteilen.
Super danke hab ich jetzt verbessert.
Ja das mit den Funktionen ist als nächstes dran :lol:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Bei solch langen Code empfehle ich Dir, diese nicht in den Thread sondern in ein Pastebin zu posten. (z.B. das im Board integrierte oder gist.github.com - bei letzterem hast Du eine Versionierung mit an Bord; sehr praktisch, da Du dann nur einmal den Link posten musst :-) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
H3ir
User
Beiträge: 1
Registriert: Sonntag 26. März 2023, 13:31

Hallo liebe Community

Ich möchte dieses Thema gerne nochmal
aufnehmen und gerne weiter entwickeln.

Bei Interesse könnt ihr euch gerne melden.
Antworten