Seite 1 von 1
Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 19:32
von M&M's_Knabberer
Kann mir jemand helfen?
Ich komme nicht weiter
Ziel ein Glücksspiel mit 3 Zahlen die ausgegeben werden, bei richtiger Kombination hat man Gewonnen etc..
Das hatte soweit auch geklappt aber ich wollte dann wenn man kein Geld mehr hat die While Schleife beenden..
hat soweit auch geklappt.
Dann wollte ich aber das wenn man per raw_input() neues Geld aufbucht weiterspielen kann.. und das hatte nicht geklappt dann kam ne Fehlermeldung von int/str etc..
Dann dachte ich pack ich das halt in ne Funktion und ruf dann die Funktion neu auf wenn Geld gebucht wurde, aber das geht irgendwie auch nicht, mein Hirn ist jetz irgendwie ausgelutscht
Code: Alles auswählen
import random
def Spiel():
a = raw_input('Geld Einwerfen: ')
Konto = a
while active:
x1 = random.randint(1,5)
x2 = random.randint(1,5)
x3 = random.randint(1,5)
Konto = Konto - 10
print x1, x2, x3
print 'Konto: ',Konto
if x1 == x2 and x2 == x3:
print 'Gewonnen'
Konto = Konto + 20
print 'Konto: ', Konto
print''
if x1 == 5 and x2 == 5 and x3 == 5:
print 'Jackpott'
Konto = Konto + 100
print 'Konto: ', Konto
print ''
a = raw_input()
if Konto <= 0:
active = False
print 'Geld einwerfen'
b = raw_input('Geld ? ')
print 'eingabe ist: ', b
Konto = b
print 'Konto: ',Konto
if Konto >=10:
Spiel()
active = True
Konto = 0
print 'Konto: ' ,Konto
Spiel()
Re: Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 19:56
von BlackJack
@M&M's_Knabberer: Versuchs mal mit tatsächlichen Funktionen. Eine Funktion ist nicht einfach nur ein benannter Code-Block, sondern sollte ein in sich geschlossenes Stück Code sein, dass nicht versucht auf irgendwelche Werte von ausserhalb (ausser Konstanten) zuzugreifen und die schon gar nicht verändern. Werte betreten eine Funktion als Argumente und verlassen sie als Rückgabewerte.
Und Funktionen sollten sich nicht rekursiv aufrufen wenn es nicht tatsächlich darum geht eine rekursives Problem zu lösen. Ein Funktionsaufruf ist keine einfache Sprunganweisung die man als GOTO missbrauchen kann weil man den Code nicht ordentlich strukturiert hat. Um etwas zu wiederholen gibt es Schleifen.
Du musst auch ein bisschen mehr darauf achten welchen Datentyp die Werte haben und was deshalb damit machen kann und was nicht. `raw_input()` liefert Zeichenketten. Wenn Du damit rechnen willst, musst Du die in eine Zahl umwandeln.
Re: Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 21:16
von BlackJack
@M&M's_Knabberer: Das ganze liesse sich ohne separate Funktionen so ausdrücken:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from random import randint
def main():
stake = 10
balance = 0
try:
while True:
while balance < stake:
print('Kontostand:', balance)
try:
amount = int(raw_input('Geld einwerfen: '))
except ValueError:
print('Bitte eine Zahl eingeben!')
else:
if amount < 0:
print('Bitte eine positive Zahl eingeben.')
else:
balance += amount
while balance >= stake:
print('Kontostand:', balance)
balance -= stake
a, b, c = (randint(1, 5) for _ in xrange(3))
if a == b == c:
print('Gewonnen')
balance += stake * 2
if a == 5:
print('Jackpot')
balance += stake * 10
raw_input()
except KeyboardInterrupt:
print('Bye...')
if __name__ == '__main__':
main()
Das ist aber schon ziemlich komplex und unübersichtlich. Darum sollte man den Code sinnvoll auf Funktionen aufteilen. Eine Funktion macht genau eine, in sich geschlossene Sache.
Die Hauptfunktion kann man grob in das Aufladen des Kontos und spielen des Spiels einteilen. Schon hätte man zwei Funktionen die man auslagern kann.
Ein Teil des Aufladens ist es den Benutzer nach einer positiven, ganzen Zahl zu fragen. Auch das kann man in eine Funktion heraus ziehen.
Aus dem Spiel selbst kann man eine Funktion herausziehen die *eine* Spielrunde durchführt.
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from random import randint
def ask_for_positive_int(prompt):
while True:
try:
value = int(raw_input(prompt))
except ValueError:
print('Bitte eine Zahl eingeben!')
else:
if value < 0:
print('Bitte eine positive Zahl eingeben.')
else:
return value
def recharge_balance(balance, minimum_amount):
while balance < minimum_amount:
print('Kontostand:', balance)
balance += ask_for_positive_int('Geld einwerfen: ')
return balance
def play_round():
result = 0
a, b, c = (randint(1, 5) for _ in xrange(3))
if a == b == c:
print('Gewonnen')
result += 2
if a == 5:
assert b == 5 and c == 5
print('Jackpot')
result += 10
return result
def play_game(balance, stake):
while balance >= stake:
print('Kontostand:', balance)
balance -= stake
balance += play_round() * stake
raw_input()
return balance
def main():
stake = 10
balance = 0
try:
while True:
balance = recharge_balance(balance, stake)
balance = play_game(balance, stake)
except KeyboardInterrupt:
print('Bye...')
if __name__ == '__main__':
main()
Damit hat man jetzt mehrere kleinere Funktionen die sich leicht verstehen lassen.
Optimal ist das noch nicht, weil das nicht wirklich gut automatisiert testbar ist und weil Benutzerinteraktion und Programmlogik vermischt sind.
Re: Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 22:05
von M&M's_Knabberer
Danke für den Tipp mit dem int()
jetzt funktioniert das Glücksspiel einwandfrei

Und ich brauchte mich auch garnicht mit den seltsamen unverständliegen Klassen auseinanderzusetzen^^
Code: Alles auswählen
import random
active = True
Konto = 0
print 'Konto: ' ,Konto
a = raw_input('Geld Einwerfen ')
a =int(a)
Konto = Konto + a
print 'gebucht: ', Konto
print ''
print 'starten', 'Spieleinsatz 10'
raw_input()
while active:
x1 = random.randint(1,4)
x2 = random.randint(1,4)
x3 = random.randint(1,4)
Konto = Konto - 10
print x1, x2, x3
print 'Konto: ',Konto
raw_input()
if x1 == x2 and x2 == x3:
print 'Gewonnen'
Konto = Konto + 20
print 'Konto: ', Konto
print''
if x1 == 5 and x2 == 5 and x3 == 5:
print 'Jackpott'
Konto = Konto + 500
print 'Konto: ', Konto
print ''
if Konto <= 0:
active = False
print 'Spiel zuende'
b = raw_input('Geld einwerfen ')
b = int(b)
Konto = Konto + b
print 'gebucht: ' , Konto
if Konto >= 10:
raw_input()
active = True
else:
raw_input('Spiel Zuende')
Re: Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 22:12
von BlackJack
@M&M's_Knabberer: Bevor Du Dich mit Klassen auseinander setzt, solltest Du Dich mit Funktionen beschäftigen. Und zwar wirklich dringend. Du hast da schon eine Codewiederholung zur Eingabe von einem Geldbetrag die nicht sein sollte und insgesamt ist es nur sehr beschränkt was man ohne Funktionen sinnvoll umsetzen kann.
Re: Hilfe für Glücksspielcode komme nicht weiter :(
Verfasst: Sonntag 21. Februar 2016, 22:20
von M&M's_Knabberer
Nagut das klingt sinnvoll danke
