Więc pracowałem nad skryptem do kursu, który robię i napotkałem błąd

Podstawową ideą programu jest system głosowania, ale podczas sprawdzania, kto otrzymał najwięcej głosów, program napotyka błąd, który odczytuje błąd

    if votes[0] > votes[1] and votes[0] > votes[2] and votes[0] > votes[3]:
IndexError: list index out of range

Pełna funkcja jest tutaj:

def getwinner():
    if votes[0] > votes[1] and votes[0] > votes[2] and votes[0] > votes[3]:
        print("Congratulations candidate",cands[0],"You win")
        if votes[1] > votes[0] and votes[1] > votes[2] and votes[1] > votes[3]:
            print("Congratulations candidate", cands[1], "You win")
            if votes[2] > votes[0] and votes[2] > votes[1] and votes[2] > votes[3]:
                print("Congratulations candidate", cands[2], "You win")
                if votes[3] > votes[0] and votes[3] > votes[1] and votes[3] > votes[2]:
                    print("Congratulations candidate", cands[3], "You win")

                    if votes[0] == votes[1] and votes[0] == votes[2] and votes[0] == votes[3]:
                        print("We have a tie")
                        if votes[1] == votes[0] and votes[1] == votes[2] and votes[1] == votes[3]:
                            print("We have a tie")
                            if votes[2] == votes[0] and votes[2] == votes[1] and votes[2] == votes[3]:
                                print("We have a tie")
                                if votes[3] == votes[0] and votes[3] == votes[1] and votes[3] == votes[2]:
                                    print("We have a tie")

Głosy są zapisywane w tablicy o nazwie „głosy”, a nazwiska kandydatów są zapisywane w „cands”. Nazwiska kandydatów są wyrównane z głosami w tablicy „głosy”. Ale czy ktoś mógłby wyjaśnić tę kwestię, a także czy istnieje prostszy, mniej zawiły sposób rozwiązania tego problemu? Dzięki

0
C Plant 19 listopad 2019, 15:24
1
print(votes), są szanse, że czwarty indeks votes[3] nie istnieje. Komunikat o błędzie mówi po prostu, że votes nie ma czwartej pozycji (lub trzeciej). Twoje indeksowanie wykracza poza długość listy.
 – 
Nicolas Gervais
19 listopad 2019, 15:25
print(len(votes)), aby sprawdzić, czy Twoja lista zawiera cztery elementy. Jeśli print(len(votes)) == 3 nie możesz uzyskać dostępu do czwartego elementu w votes.
 – 
Samuel
19 listopad 2019, 15:28
Będziesz musiał dokonać ponownych wyborów, zwycięzca to wyjątek zerowego wskaźnika
 – 
Wonka
19 listopad 2019, 15:40

2 odpowiedzi

Możesz znacznie uprościć swoją logikę i łatwo rozszerzyć ją na więcej niż 4 graczy:

max_vote = max(votes)
if votes.count(max_vote) > 1:
    print("We have a tie")
else:
    winner_index = votes.index(max_vote)
    print("Congratulations candidate", cands[winner_index], "You win")
1
gnvk 19 listopad 2019, 15:37

Wygląda na to, że Twoja lista votes nie ma 4 wartości. Będzie narzekać, że nie ma nic w indeksie 3, jeśli nie ma nic w indeksie 3 i nie ma innego powodu.

0
Corsaka 19 listopad 2019, 15:27