Seite 1 von 1

Tischtennissimulation

Verfasst: Dienstag 8. Dezember 2020, 18:51
von insi
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

Re: Tischtennissimulation

Verfasst: Dienstag 8. Dezember 2020, 20:57
von Sirius3
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.

Re: Tischtennissimulation

Verfasst: Dienstag 8. Dezember 2020, 22:16
von insi
Danke erstmal für die Verbesserungsvorschläge, hab das dementsprechend nochmal überarbeitet. Bei dem int muss ich mir echt an den Kopf fassen :oops:
Und das mit den Listen ist nichts endgültiges, war nur meine anfängliche Überlegung die einzelnen Ergebnisse irgendwie übersichtlich abzurufen.

Grüße

Re: Tischtennissimulation

Verfasst: Mittwoch 9. Dezember 2020, 09:05
von Sirius3
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:

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()