Roulette Sagemath Python

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
happyfriend
User
Beiträge: 3
Registriert: Donnerstag 5. Februar 2015, 14:08

Moin moin liebe Community,

ich habe schon einige Threads zu Roulette in Python durchgelesen und habe dennoch zwei offene Fragen.

Wie kann man eine Menge x an Münzen auf eine Zahl im Roulette setzen und wie programmiere ich einen richtigen if Befehl zu einer Strategie, bsp. das ich jedesmal die doppelte Menge an Münzen auf Rot setze nachdem ich verloren habe :?: :?: :K

Meinen bisherige Stand kann ich gerne bei Bedarf dazu schreiben, dennoch ist er sehr amateurhaft geschrieben und ich würde das gerne erstmal außen vor lassen.

Mfg Happyfriend
BlackJack

@happyfriend: Die Frage ist viel zu allgemein gestellt. Es gibt viele Variationen wie man ein Roulettespiel modellieren kann, und wie man dann dort Einsätze macht oder Strategien in Code giesst, hängt davon ab wie die Simulation konkret umgesetzt wurde.
happyfriend
User
Beiträge: 3
Registriert: Donnerstag 5. Februar 2015, 14:08

def Roulette(a)
import random
zahl = random.randint(0,36)
is_even(zahl)
print zahl

def Roulette()
import random
random.randint(0,36) = number
if number % 2 == 0
print number

Das ist mein Anfang gewesen, um erstmal eine gerade Zahl auszugeben und im Nachhinein den Befehl für das setzen von Münzen hinzuzufügen. Frage mich nur was ich ändern müsste, um eine Ausgabe meiner Zahl und eine true Ausgabe zu erhalten, da beide Ideen nicht klappen und anscheinend die Definition an sich falsch ist.
Zuletzt geändert von Anonymous am Donnerstag 5. Februar 2015, 15:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Unser Roulett hat 37 Zahlen, das Ami Roulett 38 und deines hat 35.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hast du mal ein Python-Tutorial vernünftig durchgearbeitet? Dein Code ist so ja gar nicht lauffähig. Und bitte setze den Code hier im Forum doch in Code-Tags (über dem Textfeld ist ein mehr oder weniger großer Button "Code"), dann ist der auch vernünftig lesbar.

@lackschuh:
lackschuh hat geschrieben:Unser Roulett hat 37 Zahlen, das Ami Roulett 38 und deines hat 35.
https://docs.python.org/2/library/random.html hat geschrieben: random.randint(a, b)
Return a random integer N such that a <= N <= b.
Das Leben ist wie ein Tennisball.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

@EyDu
Stimmt, hab es mir range() verwechselt. 0-35=36 nicht 35.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@lackschuh: a <= N <= b finde ich auch unerwartete Grenzen, da muss man mindestens einmal drüber stolpern, damit man sich dran erinnert.
Das Leben ist wie ein Tennisball.
BlackJack

Naja, bei „gib mir eine Zufallszahl zwischen 1 und 6” würden sicher viele darüber stolpern wenn beide Endpunkte nicht inklusive wären. Und wenn man einen Index haben möchte zu einer gegebenen Länge (und `random.choice()` nicht in Frage kommt) gibt es ja `random.randrange()` wo analog zu `range()` & Co der Endwert *nicht* inklusive ist. :-)
happyfriend
User
Beiträge: 3
Registriert: Donnerstag 5. Februar 2015, 14:08

Code: Alles auswählen

import random

randomnumber = random.randrange(0,37)

bet = raw_input("Please enter either a number between 1 and 37, or chose 'odd'")

def roulette():
    if bet.isdigit():
        if int(bet) == retandomnumber:
            print "Win"
            elif int(bet) != randomnumber:
                print "nothing"
                if bet == "even":
                    if randomnumber%2 == 0:
                        print "win"
                        elif randomnumber%2 != 0:
                            print "nothing"
                            if bet == "odd":
                                if randomnumber%2 != 0:
                                    print "Win"
                                    elif randomnumber%2 !=0:
                                        print "Nothing"
                                        
                                        roulette()
So nach etlichen Stunden kam ich nun zu diesem Ergebnis, teilweise funktioniert das nicht mehr, wenn ich es neu lade und daran weiter arbeite. Habt ihr da Tipps für mich wo ich etwas ändern könnte oder mir noch etwas anlesen kann? random.randrange() fand ich sehr nett. Schon mal vielen Dank für eure Geduld.
BlackJack

@happyfriend: So wie es dort steht ist das syntaktisch nicht korrekt. Wäre richtig eingerückt bekämst Du sehr schnell einen `NameError` weil `retandomnumber` nicht definiert ist. Desweiteren sollte man Rekursion nicht als simplen Schleifenersatz verwenden, das geht nämlich auf Dauer nicht gut weil die Aufruftiefe begrenzt ist.

Man kann mehr als eine Bedingung logisch durch ``and`` und ``or`` verknüpfen.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

So ist die Einrückung korrekt, if und das dazugehörige elif müssen auf die gleiche Ebene:

Code: Alles auswählen

import random
 
randomnumber = random.randrange(0,37)
 
bet = raw_input("Please enter either a number between 1 and 37, or chose 'odd'")
 
def roulette():
    if bet.isdigit():
        if int(bet) == randomnumber:
            print "Win"
        elif int(bet) != randomnumber:
            print "nothing"
    elif bet == "even":
        if randomnumber%2 == 0:
            print "win"
        elif randomnumber%2 != 0:
            print "nothing"
    elif bet == "odd":
        if randomnumber%2 != 0:
            print "Win"
        elif randomnumber%2 !=0:
            print "Nothing"

roulette()
Die 0 braucht übrigens eine Sonderbehandlung, weil in Python ist die 0 gerade, beim Roulette ist die 0 weder gerade noch ungerade.
randomnumber und bet solltest Du besser als Funktionsparameter übergeben.
roulette() solltest Du nicht in der Funktion selbst aufrufen. Ein Roulette Spiel ist kein rekursives Problem. Mach lieber eine Schleife, in der roulette() immer wieder neu aufgerufen wird.
Ich würde auch eine Klasse programmieren, in der die verschiedenen Arten zu setzen abgebildet sind (rot/schwarz, einzelne Zahl, Drittel, ...). Diese Klasse hat eine Funktion, die alle Gewinn-Zahlen zurückgibt. Ein Roulette Lauf ist dann einfach nur ein random.randrange(0,37) und es wird geschaut, ob die Zahl bei den Gewinnzahlen dabei ist. Wenn das Setzen in einem Objekt gespeichert wird, ist es auch viel einfacher mehrere Einsätze bei einem Roulette Lauf abzufragen.
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: eine Klasse wäre dafür unnötig, eine einfache Funktion oder Datenstruktur reicht auch.

Code: Alles auswählen

import random

WINNING_NUMBERS = {
    'even': range(2,37,2),
    'odd': range(1,37,2),
}
WINNING_NUMBERS.update((str(i), [i]) for i in range(0,37))

def main():
    while True:
        bet = raw_input("Please enter either a number between 1 and 37, 'even' or 'odd': ")
        randomnumber = random.randrange(0,37)
        print "The number is", randomnumber
        print "Win" if randomnumber in WINNING_NUMBERS[bet] else "nothing"

if __name__ == '__main__':
    main()
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Sirius3 hat geschrieben:eine Klasse wäre dafür unnötig, eine einfache Funktion oder Datenstruktur reicht auch.
Die Sache wird komplizierter, wenn alle Roulette Möglichkeiten abgebildet werden sollen: setzen auf 2x2 Felder, horizontale Reihen (bin mir nicht ganz sicher ob das bei Roulette geht), Drittel, einzelne Zahlen, ...
Das alles lässt sich nur mühsam mit einem Dictionary machen.
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: Die komplizierte Funktion, um die Zahlen in Blöcken zu berechnen, bräuchte so oder so, da bietet eine Klasse auch keinen Vorteil. Wer sich die Mühe sparen will, schreibt die Zahlen einfach als Liste direkt.
BlackJack

@MagBen: Man könnte das Wörterbuch auch anders herum aufbauen, also zu jeder Zahl abbilden zu welchen ”Setzmöglichkeiten” sie gehört. Und dann testen ob das auf was der Spieler gesetzt hat mit einer der Möglichkeiten zur gezogenen Zahl übereinstimmt.
Antworten