Stimmt dieses Python Craps Programm?
Hallo,
wir müssen in Informatik unser eigenes Craps Spiel programmieren.
Die beiden Würfel werden geworfen. Wenn die Augensumme 7 oder 11 beträgt, hat man gewonnen. Wenn die Augensumme 2, 3 oder 12 beträgt, hat man verloren. Ansonsten wird weitergewürfelt, bis eine Entscheidung gefallen ist. Bei jedem weiteren Wurf der beiden Würfel hat man verloren, wenn eine 7 fällt, und gewonnen, wenn die neue Augensumme gleich der Augensumme im ersten Wurf ist.
Ich bin mir jedoch sehr unsicher, ob ich es richtig programmiert habe, ich bekomme am Ende ein Ergebnis, jedoch bin ich mir unsicher, ob das Spiel nach den Spielregeln ausgeführt wird.
Ich bitte um Hilfe und bedanke mich im Voraus.
Hier der Code:
from random import randint;
#Eingang
print('Dieses Programm simuliert das bekannte Casino-Spiel "Craps". Der Spieler wirft ein normales Paar Würfel.')
print('Beträgt die Augensumme am Ende 2, 3 oder 12, hat der Spieler verloren. Beträgt die Augensumme 7 oder 11, hat der Spieler gewonnen.')
print('Bekommt man keine dieser Augensumme wird weitergewürfelt, bis eine Entscheidung gefallen ist.')
print('Bei jedem weiteren Wurf der beiden Würfel hat man verloren, wenn eine 7 fällt, und gewonnen,')
print('wenn die neue Augensumme gleich der Augensumme im ersten Wurf ist.\n')
anzahl = int(input("Gib die Anzahl der zu simulierenden Craps-Spiele ein: "))
#Verarbeitung
hilf = 0
gewinn = 0
weiterwuerfeln = 0
while hilf < anzahl:
hilf = hilf + 1
wuerfel1 = randint(1, 6)
wuerfel2 = randint(1, 6)
ergebnis = wuerfel1 + wuerfel2
if ergebnis == 2 or ergebnis == 3 or ergebnis == 12:
gewinn = gewinn + 0
elif ergebnis == 7 or ergebnis == 11:
gewinn = gewinn + 1
else:
while weiterwuerfeln != 7 and weiterwuerfeln != ergebnis:
wuerfelneu1 = randint(1, 6)
wuerfelneu2 = randint(1, 6)
weiterwuerfeln = wuerfelneu1 + wuerfelneu2
if weiterwuerfeln == ergebnis:
gewinn = gewinn + 1
if weiterwuerfeln == 7:
gewinn = gewinn
print('Von', anzahl, 'simulierten Craps-Runden, waren ', gewinn, ' Gewinne dabei, daraus ergibt sich eine Gewinnrate von '+ str(100*(gewinn/anzahl)) + '%.')
1 Antwort
Ich bin mir jedoch sehr unsicher, ob ich es richtig programmiert habe, ich bekomme am Ende ein Ergebnis, jedoch bin ich mir unsicher, ob das Spiel nach den Spielregeln ausgeführt wird.
Super! Du hast gerade etwas gelernt, wofür viele Softwareentwickler Jahre brauchen: man muss Programme so schreiben, dass sie vernünftig testbar sind. Das ist dein Programm derzeit nicht: es hängt von Benutzereingaben und (vor allem) vom Zufall ab. Das ist alles eng verbunden und kann nicht getrennt werden - es ist also nicht geeignet strukturiert.
Überleg dir mal, wie du es umbauen kannst. Zum Beispiel:
- Die einzelnen Abbruchbedingungen (Gewinn und Verlust) in kleine Funktionen, die du einzeln testen kannst.
- Den ganzen Ablauf so gestalten, dass du eine Sequenz an Würfen vorgibst (etwa als Liste) und dann entsprechend die Resultate bekommst. Das kannst du dann testen, ohne vom Zufall abzuhängen.
- Erst das "große" Hauptprogramm füttert dann diese Funktionen mit den Zufallswerten.
und der code ist nachvollziehbar , sorry aber 2 whiles und ein IF ist jetzt nicht hoch komplex
Die meisten kritischen Bugs in Software sind letztlich völlig banaler Ursache und kommen in kleinen Codeänderungen, die "nachvollziehbar" und "nicht hoch komplex" sind - und sie kommen von Leuten, die im Gegensatz zum FS jahrelange Erfahrung haben.
Spätestens wenn ich andere Leute fragen muss ob mein Code überhaupt funktioniert, sollte ich mich fragen was ich verbessern kann.
sorry aber diese diskussion ist unnötig . ich erkläre nur einem Worker sowas , der rest soll erstmal üben und schüler etc haben was anderes zu tun als ein Konzept anzuwenden , bei einem 10 zeiler . ich weiss, du kannst nicht differenzieren , bei dir sind alle autofahrer rennfahrer und brauchen einen boxenstop etc . antworte einfach verhältnismässig und nicht einfach nur damit du on top der könig der richtigkeit bist .
lol , er will es ja nicht verkaufen , und der code ist nachvollziehbar , sorry aber 2 whiles und ein IF ist jetzt nicht hoch komplex , zustimmen tu ich dir wenn mit test array für die würfe .