• 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!

Object Storage Arubacloud
0 głosów
187 wizyt
pytanie zadane 22 października 2018 w Python przez El Lirón Obywatel (1,320 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 Ekspert (344,860 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 Obywatel (1,320 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 Ekspert (344,860 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ź 203 wizyt
pytanie zadane 31 października 2018 w Python przez El Lirón Obywatel (1,320 p.)
0 głosów
1 odpowiedź 125 wizyt
pytanie zadane 24 stycznia 2019 w Python przez Dawid89 Obywatel (1,100 p.)
0 głosów
1 odpowiedź 108 wizyt

92,539 zapytań

141,382 odpowiedzi

319,479 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...