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

Dlaczego wartość liczbowa atrybutów tych obiektów na liście nie jest sumowana prawidłowo?

Cloud VPS
0 głosów
167 wizyt
pytanie zadane 20 października 2018 w Python przez El Lirón Obywatel (1,350 p.)

Witajcie! Chciałbym, aby program przechowywał na liście party_list obiekty klasy Party() z wartościami atrybutów nadanymi przez użytkownika. Następnie, aby policzył sumę wartości z atrybutów votes. Okazuje się jednak, że program jakby mnożył wartość atrybutu ostatniowprowadzonego obiektu przez liczbę obiektów na liście. No coś dziwnego. Czy powiecie, czemu tak się dzieje? Co mogę zrobić, aby osiągnąć ten cel, czyli zesumować poprawnie?

Oto kod main:

import P

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? "))

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

party_list=[]

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

if system == 1:
    total = 0
    for x in party_list:
        total = total  + p.votes
    print(total)
elif system == 2:
    print("S-L")
else:
    print("H-N")



A tu moduł własny:

class Party(object):
    def __init__(self):
        self.ask_party_name()
        self.ask_party_votes()

    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 + ": "))

I 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? 3

W jakim systemie zostaną przeliczone głosy?
d'Hondta - wybierz 1
Sainte-Lague - wybierz 2
Hare'a-Niemayera - wybierz 3
1
Podaj nazwę lub skrót partii: a
Podaj liczbę głosów, którą zdobyła partia a: 200
Podaj nazwę lub skrót partii: b
Podaj liczbę głosów, którą zdobyła partia b: 300
Podaj nazwę lub skrót partii: c
Podaj liczbę głosów, którą zdobyła partia c: 500
1500

Process finished with exit code 0

 

1 odpowiedź

+1 głos
odpowiedź 20 października 2018 przez pr0way Nałogowiec (41,080 p.)
wybrane 21 października 2018 przez El Lirón
 
Najlepsza

Ogólnie rzecz biorąc kod jest ok, pomyliłeś się chyba pod koniec przy:

if system == 1:
    total = 0
    for p in party_list:
        total = total  + p.votes
    print(total)

W twoim kodzie iterujesz po x zamiast p (jak wyżej) a chcesz odczytywać właściwości obiektów.

1
komentarz 21 października 2018 przez El Lirón Obywatel (1,350 p.)
Dziękuję! Działa ;)

Podobne pytania

0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 31 października 2018 w Python przez El Lirón Obywatel (1,350 p.)
0 głosów
1 odpowiedź 406 wizyt
0 głosów
1 odpowiedź 690 wizyt
pytanie zadane 31 sierpnia 2016 w Java przez Jonki Dyskutant (8,180 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 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

Kursy INF.02 i INF.03
...