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

VPS Starter Arubacloud
0 głosów
185 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,100 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,100 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ź 202 wizyt
pytanie zadane 31 października 2018 w Python przez El Lirón Obywatel (1,320 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 24 stycznia 2019 w Python przez Dawid89 Obywatel (1,100 p.)
0 głosów
1 odpowiedź 107 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...