Seite 1 von 1

Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 14:46
von happyfriend
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

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 14:57
von 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.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 15:08
von happyfriend
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.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 15:22
von lackschuh
Unser Roulett hat 37 Zahlen, das Ami Roulett 38 und deines hat 35.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 15:27
von EyDu
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.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 15:31
von lackschuh
@EyDu
Stimmt, hab es mir range() verwechselt. 0-35=36 nicht 35.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 15:55
von EyDu
@lackschuh: a <= N <= b finde ich auch unerwartete Grenzen, da muss man mindestens einmal drüber stolpern, damit man sich dran erinnert.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 16:10
von 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. :-)

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 22:23
von happyfriend

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.

Re: Roulette Sagemath Python

Verfasst: Donnerstag 5. Februar 2015, 22:33
von 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.

Re: Roulette Sagemath Python

Verfasst: Freitag 6. Februar 2015, 07:06
von MagBen
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.

Re: Roulette Sagemath Python

Verfasst: Freitag 6. Februar 2015, 08:44
von Sirius3
@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()

Re: Roulette Sagemath Python

Verfasst: Freitag 6. Februar 2015, 09:27
von MagBen
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.

Re: Roulette Sagemath Python

Verfasst: Freitag 6. Februar 2015, 09:38
von Sirius3
@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.

Re: Roulette Sagemath Python

Verfasst: Freitag 6. Februar 2015, 09:42
von 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.