Hallo an Alle,
ich lerne seit kurzem Python und sollte ein einfaches Programm schreiben, welches zwei Spieler mit Unterschiedlicher Gewinnchance gegeneinander Tischtennis spielen lässt.
Ein Satz ist gewonnen, wenn ein Spieler mindestens 11 Punkte und 2 Punkte mehr als der Gegner erzielt hat. Ich habe einen Satzsieg nun mit einer 'unendlichen' Schleife gelöst, welche vorzeitig beendet wird, sollten die genannten Bedingungen eintreten. Allerdings finde ich diese Lösung alles andere als elegant. Gibt es eine einfache Möglichkeit die Schleife eleganter zu gestalten? Hier ist mein bisheriger Code:
# Tischtennisspiel 60:40
from random import randint
Spielstand_Spieler_1 = 0
Spielstand_Spieler_1 = int(Spielstand_Spieler_1)
Spielstand_Spieler_2 = 0
Spielstand_Spieler_2 = int(Spielstand_Spieler_2)
unendlich=1
while unendlich > 0:
punkt_sieg = randint(1,100)
if punkt_sieg < 61:
Spielstand_Spieler_1 = Spielstand_Spieler_1 + 1
if punkt_sieg > 60:
Spielstand_Spieler_2 = Spielstand_Spieler_2 + 1
if (Spielstand_Spieler_1 >= 11) and ((Spielstand_Spieler_2 + 2) <= Spielstand_Spieler_1):
break
if (Spielstand_Spieler_2 >= 11) and ((Spielstand_Spieler_1 + 2) <= Spielstand_Spieler_2):
break
Satz = [
[['Spieler_1'], Spielstand_Spieler_1],
[['Spieler_2'], Spielstand_Spieler_2],
[['Ergebnis'], Spielstand_Spieler_1, ':', Spielstand_Spieler_2]
]
print('Das Ergebnis des Satzes lautet:', Satz[2])
Viele Grüße
insi
Tischtennissimulation
Mit Spielstand_Spieler_1 = 0 ist die Variable schon vom Typ int. Das nochmal umzuwandeln ist unnötig.
Seit wann hat unendlich den Wert 1. Für eine Endlosschleife benutzt man einfach while True.
Wenn man eine if-Bedingung hat, die genau das Gegenteil der vorangegangenen if-Bedingung ist, dann benutzt man else.
Was soll diese Listen von Listen von Listen in Satz? Man speichert Daten in Listen, nicht halb vorformatierte Strings.
Seit wann hat unendlich den Wert 1. Für eine Endlosschleife benutzt man einfach while True.
Wenn man eine if-Bedingung hat, die genau das Gegenteil der vorangegangenen if-Bedingung ist, dann benutzt man else.
Was soll diese Listen von Listen von Listen in Satz? Man speichert Daten in Listen, nicht halb vorformatierte Strings.
Danke erstmal für die Verbesserungsvorschläge, hab das dementsprechend nochmal überarbeitet. Bei dem int muss ich mir echt an den Kopf fassen
Und das mit den Listen ist nichts endgültiges, war nur meine anfängliche Überlegung die einzelnen Ergebnisse irgendwie übersichtlich abzurufen.
Grüße

Und das mit den Listen ist nichts endgültiges, war nur meine anfängliche Überlegung die einzelnen Ergebnisse irgendwie übersichtlich abzurufen.
Grüße
Beim Programmieren will man möglichst generell anwendbare Funktionen schreiben.
Hier mal eine Variante, die man einfach auf 100 gleichzeitig gegeneinander spielende Tennisspieler erweitern kann:
Hier mal eine Variante, die man einfach auf 100 gleichzeitig gegeneinander spielende Tennisspieler erweitern kann:
Code: Alles auswählen
from random import choices
SCORE_WEIGHTS = [60, 40]
def main():
player_scores = [0] * len(SCORE_WEIGHTS)
while True:
print(player_scores)
choice = choices(range(len(SCORE_WEIGHTS)), weights=SCORE_WEIGHTS)[0]
player_scores[choice] += 1
best_score, second_best_score = sorted(player_scores, reverse=True)[:2]
if best_score >= max(11, second_best_score + 2):
break
print('Das Ergebnis des Satzes lautet:', ':'.join(map(str, player_scores)))
if __name__ == '__main__':
main()