• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ciekawe zachowanie programu: wykrywa TypeError... ale działa dalej!

0 głosów
47 wizyt
pytanie zadane 22 października 2018 w Python, Django przez El Lirón Użytkownik (900 p.)

Witajcie! Dlaczego tak się dzieje, co mogę zrobić (opcja int(quotient) w 43 linii nie pomaga) i czy w ogóle coś trzeba robić, skoro program idzie dalej? Co ciekawe: test3 się nie wykonuje..

Oto kod main:

import P

#user gives info about electoral district

hm_seats=int(input("Ile mandatów jest możliwych do zdobycia w tym okręgu? "))

hm_parties=int(input("Ile partii wzięło udział w wyborach w tym okręgu? "))

party_list=[]

x=0
while x < hm_parties:
    p=P.Party()
    party_list.append(p)
    x += 1

system = int(input("""
W jakim systemie zostaną przeliczone głosy?
d'Hondta - wybierz 1
Sainte-Lague - wybierz 2
Hare'a-Niemayera - wybierz 3 
"""))

scope=[1, 2, 3]
while system not in scope:
    system = int(input("""
Wybierz 1, 2 lub 3
d'Hondta - wybierz 1
Sainte-Lague - wybierz 2
Hare'a-Niemayera - wybierz 3 
"""))

# calculations in d'Hondt system
## creatig quotients' lists for each party

if system == 1:
    for p in party_list:
        divisor = 1

        x=0
        while x < hm_seats:
            quotient = p.votes/divisor
            int(quotient)
            p.quotients_list.append(quotient)
            divisor += 1
            x += 1

    print("test")
    print(party_list[0].quotients_list)
    print(party_list[1].quotients_list)

## creating list of all qoutients

    all_quotients = []

    for p in party_list:
        for quotient in p.quotients_list:
            all_quotients.append(quotient)

    print("test2")
    print(all_quotients)

## looking for biggests quotients

    winning_quotients = []
    the_biggest = party_list[0].quotients_list[0]

    for p in party_list:
        for quotient in p.quotients_list:
            if the_biggest < p.quotients_list[quotient]:
                the_biggest = p.qoutients_list[quotient]

    winning_quotients.append(the_biggest)

    print("test3")
    print(the_biggest)

To klasa Party:

class Party(object):
    def __init__(self):
        self.ask_party_name()
        self.ask_party_votes()
        self.seats = 0
        self.quotients_list = []

    def ask_party_name(self):
        self.party_name=input("Podaj nazwę lub skrót partii: ")

    def ask_party_votes(self):
        self.votes=int(input("Podaj liczbę głosów, którą zdobyła partia " + self.party_name + ": "))

A oto output:

Ile mandatów jest możliwych do zdobycia w tym okręgu? 3
Ile partii wzięło udział w wyborach w tym okręgu? 2
Podaj nazwę lub skrót partii: A
Podaj liczbę głosów, którą zdobyła partia A: 90
Podaj nazwę lub skrót partii: B
Podaj liczbę głosów, którą zdobyła partia B: 120

W jakim systemie zostaną przeliczone głosy?
d'Hondta - wybierz 1
Sainte-Lague - wybierz 2
Hare'a-Niemayera - wybierz 3
1
Traceback (most recent call last):
  File "C:/Users/Michał/PycharmProjects/KalkulatorWyborczy/Main.py", line 70, in <module>
    if the_biggest < p.quotients_list[quotient]:
TypeError: list indices must be integers or slices, not float
test
[90.0, 45.0, 30.0]
[120.0, 60.0, 40.0]
test2
[90.0, 45.0, 30.0, 120.0, 60.0, 40.0]

Process finished with exit code 1

 

1 odpowiedź

+1 głos
odpowiedź 22 października 2018 przez adrian17 Mędrzec (199,700 p.)
wybrane 22 października 2018 przez El Lirón
 
Najlepsza

Na oko, po prostu wyjście normalne i komunikat o błędzie (stdout, stderr) były dziwnie buforowane i wcześniejsze wyjście programu wypisało się po późniejszym komunikacie o błędzie.

Strzelam, że to Windows?

Dlaczego tak się dzieje, co mogę zrobić

Co do samej kolejności wypisywania, sam nie wiem.

Co do błędu, raczej nie chcesz indeksować - `quotient` to już chyba wartość, którą chcesz porównywać.

komentarz 22 października 2018 przez El Lirón Użytkownik (900 p.)
Tak, zgadza się: Windows ;)

Owszem, chcę porównać wartość liczbową, jaka się znajduje w tym miejscu z wartością the_biggest aby ostatecznie wyłonić największą liczbę z tej listy. Czy napiszesz, jak to zrobić, aby "dostać się" do tej wartości w tym miejscu?
komentarz 22 października 2018 przez adrian17 Mędrzec (199,700 p.)

Czy napiszesz, jak to zrobić, aby "dostać się" do tej wartości w tym miejscu?

Przecież już ją masz - nazywa się `quotient`.

for quotient in p.quotients_list:

 

Podobne pytania

0 głosów
1 odpowiedź 83 wizyt
pytanie zadane 31 października 2018 w Python, Django przez El Lirón Użytkownik (900 p.)
0 głosów
1 odpowiedź 41 wizyt
pytanie zadane 24 stycznia w Python, Django przez Dawid89 Użytkownik (500 p.)
0 głosów
1 odpowiedź 35 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

66,399 zapytań

113,154 odpowiedzi

239,540 komentarzy

46,660 pasjonatów

Przeglądających: 291
Pasjonatów: 13 Gości: 278

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...