generator wyniku tenisowego

0

Napisałem generator wyniku tenisowego, 5 setowego. Zapewne jest na to jakiś prostszy, bardziej elegancki i profesjonalny sposób. Fajnie, gdyby ktoś coś podpowiedział :)

Z góry dziękuję i pozdrawiam.


import random 

counterPlayer1 = 0
counterPlayer2 = 0

set1player1 = 0
set1player2 = 0 

### set 1 ###

set1 = random.randint(0,11)
set2 = random.randint(0,11)
set3 = random.randint(0,11)
set4 = random.randint(0,11)
set5 = random.randint(0,11)

if set1 in range(0,6):
    set1player1 = random.randint(6,7)
    counterPlayer1 += 1
    if set1player1 == 6:
        set1player2 = random.randint(0,4)
    elif set1player1 == 7:
        set1player2 = random.randint(5,6)
else:
    set1player2 = random.randint(6,7)
    counterPlayer2 += 1
    if set1player2 == 6:
        set1player1 = random.randint(0,4)
    elif set1player2 == 7:
        set1player1 = random.randint(5,6)

### set 2 ###

if set2 in range(0,6):
    set2player1 = random.randint(6,7)
    counterPlayer1 += 1
    if set2player1 == 6:
        set2player2 = random.randint(0,4)
    elif set2player1 == 7:
        set2player2 = random.randint(5,6)
else:
    set2player2 = random.randint(6,7)
    counterPlayer2 += 1
    if set2player2 == 6:
        set2player1 = random.randint(0,4)
    elif set2player2 == 7:
        set2player1 = random.randint(5,6)

### set 3 ###

set3 = random.randint(0,11)
if set3 in range(0,6):
    set3player1 = random.randint(6,7)
    counterPlayer1 += 1
    if set3player1 == 6:
        set3player2 = random.randint(0,4)
    elif set3player1 == 7:
        set3player2 = random.randint(5,6)
else:
    set3player2 = random.randint(6,7)
    counterPlayer2 += 1
    if set3player2 == 6:
        set3player1 = random.randint(0,4)
    elif set3player2 == 7:
        set3player1 = random.randint(5,6)

if counterPlayer1 == 3 or counterPlayer2 == 3:
    pass
else:
    ### set 4 ###

    if set4 in range(0,6):
        set4player1 = random.randint(6,7)
        counterPlayer1 += 1
        if set4player1 == 6:
            set4player2 = random.randint(0,4)
        elif set4player1 == 7:
            set4player2 = random.randint(5,6)
    else:
        set4player2 = random.randint(6,7)
        counterPlayer2 += 1
        if set4player2 == 6:
            set4player1 = random.randint(0,4)
        elif set4player2 == 7:
            set4player1 = random.randint(5,6)

if counterPlayer1 == 3 or counterPlayer2 == 3:
    pass
else:
    ### set 5 ###

    if set5 in range(0,6):
        set5player1 = random.randint(6,7)
        counterPlayer1 += 1
        if set5player1 == 6:
            set5player2 = random.randint(0,4)
        elif set5player1 == 7:
            set5player2 = random.randint(5,6)
    else:
        set5player2 = random.randint(6,7)
        counterPlayer2 += 1
        if set5player2 == 6:
            set5player1 = random.randint(0,4)
        elif set5player2 == 7:
            set5player1 = random.randint(5,6)

print(counterPlayer1, counterPlayer2)

if counterPlayer1 + counterPlayer2 == 3:
    print('Novak Djokovic - Andy Murray %s - %s %s - %s %s - %s ' % (set1player1, set1player2, set2player1, set2player2, set3player1, set3player2))
elif counterPlayer1 + counterPlayer2 == 4:
    print('Novak Djokovic - Andy Murray %s - %s %s - %s %s - %s %s - %s' % (set1player1, set1player2, set2player1, set2player2, set3player1, set3player2, set4player1, set4player2))
elif counterPlayer1 + counterPlayer2 == 5:
    print('Novak Djokovic - Andy Murray %s - %s %s - %s %s - %s %s - %s %s - %s' % (set1player1, set1player2, set2player1, set2player2, set3player1, set3player2, set4player1, set4player2, set5player1, set5player2))
0

Pro tip: obczaj słowo kluczowe def

0

A potem class ;)

0

Trochę bez sensu jest generowanie całkowicie losowego wyniku tenisowego. Równie dobrze mógłbyś po prostu losować w pętli zwycięzcę seta. Jeżeli ma to mieć jakieś zastosowanie, to użyłbym wiadomości z rachunku prawdopodobieństwa i statystyki. Dla przykładu na podstawie statystyk dotyczących gry tenisisty można by zliczać wartości oczekiwane prawdopodobieństwa zdobycia punktu przy swoim serwisie. Potraktowałbym seta jako proces stochastyczny zliczający zdobyte punkty. Prawdopodobnie musiałbyś liczyć sobie wartości oczekiwane wektora losowego o rozkładzie dwupunktowym. No i jeszcze rzecz jasna musiałbyś przyjąć sobie jakąś formułę szacującą prawdopodobieństwo zdobycia punktu.

Co do języka, koledzy dobrze mówią. W ten sposób daleko nie zajedziesz, bo twój program jest skonstruowany jak stary program na karcie perforowanej. Elegancka notacja powinna zająć trzy razy mniej miejsca.

Przytoczone przeze mnie rozwiązanie byłoby niezłym ćwiczeniem na początki z programowaniem. Pozdrawiam;)

0
Maciej Cąderek napisał(a):

Pro tip: obczaj słowo kluczowe def

Nie bardzo rozumiem jak można by tutaj zastosować funkcje :/

0

Za każdym razem, gdy Ci się powtarza jakiś fragment kodu z co najwyżej małymi zmianami, dobrym pomysłem jest go wydzielić jako funkcję. Czyli na przykład każde powtórzenie seta.

Inną wskazówką, że coś dobrze by było wydzielić, jest użycie komentarza tłumaczącego rolę jakiejś linijki, ale to akurat u Ciebie nie występuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0