Rozwiązanie do zadania wybory w Python - rafgus1/Matura2020 GitHub Wiki

import matplotlib.pyplot as plt
plik = open('dane_wybory.txt')
dane = []
suma = []
for linia in plik:  #odczyt danych z pliku i ich formatowanie
    linia=linia.strip().split()
    okreg=linia[0]  #pobranie nazy okręgu
    linia=[int(l) for l in linia[1:]] #zamiana tekstu na liczby bez okręgu
    linia.insert(0, okreg) #dodanie na początku okręgu
    dane.append(linia) #dodanie sformatowanych danych do zbioru    

def zad1(tab):
    x, y = [],[]
    for i in range(0,len(tab)):
        liczba_glosow = 0
        for j in range(1,6):
            liczba_glosow+=tab[i][j]
        x.append(dane[i][0])
        y.append(liczba_glosow)#suma głosów w okręgu
        suma.append(liczba_glosow)
    plt.bar(x, y)
    plt.title('Rozkład głosów w kraju', fontsize=16, color='#323232')
    plt.show()        

def zad2(tab):
    miasteczko = [['',0],['',0],['',0],['',0],['',0]]
    for i in range(0, len(tab)):
        for j in range(1,6):
            wynik=tab[i][j]
            if(wynik/suma[i]>miasteczko[j-1][1]):
                miasteczko[j-1][0]=tab[i][0]
                miasteczko[j-1][1]=wynik/suma[i]
    for i in range(0,5):
        print("K",i,":",miasteczko[i][0])

def ile_mandatow(glosy, liczba_mandatow):
    mandaty=[0,0,0,0,0]
    while liczba_mandatow>0:
        max=glosy[0]/(2*mandaty[0]+1)
        index=0
        for i in range(1, len(glosy)):
            if int(glosy[i])/(2*mandaty[i]+1)>max:
                max=glosy[i]/(2*mandaty[i]+1)
                index=i
        mandaty[index]+=1
        liczba_mandatow-=1
    return(mandaty)

def zad3(tab):
    mandaty_max=[0,0,0,0,0]
    for wynik in tab:
        mandaty=ile_mandatow(wynik[1:],20)
        for i in range(0, len(mandaty)):
            if mandaty[i]>mandaty_max[i]:
                mandaty_max[i]=mandaty[i]
    for i in range(0, len(mandaty_max)):
        print("K",i+1,":",mandaty_max[i])

def zad4(tab):
    print("Mandaty przyznane standardowo")
    mandaty_przyznane=[0,0,0,0,0]
    for wynik in tab:
        mandaty=ile_mandatow(wynik[1:],20)
        for i in range(0, len(mandaty)):
            mandaty_przyznane[i]+=mandaty[i]
    for i in range(0, len(mandaty_przyznane)):
        print("K",i+1,":",mandaty_przyznane[i])
    regiony=[] #przygotowanie danych dla regionów
    region=tab[0][1:]
    i=1
    for miasto in tab[1:]:
        miasto=miasto[1:]
        if i%5==0:
            regiony.append(region)
            region=miasto
            i+=1
            continue
        for j in range(0,5):
            region[j]+=miasto[j]
        i+=1
    regiony.append(region)    
    print("Mandaty w regionach")
    mandaty_przyznane=[0,0,0,0,0]
    for wynik in regiony:
        mandaty=ile_mandatow(wynik,100)
        for i in range(0, len(mandaty)):
            mandaty_przyznane[i]+=mandaty[i]
    for i in range(0, len(mandaty_przyznane)):
        print("K",i+1,":",mandaty_przyznane[i])

def zad5():
    glosy=100000
    liczba_mandatow=[20,40,100]
    for mandaty in liczba_mandatow:
        for i in range(int(glosy/2), 1, -1):
            if ile_mandatow([i, glosy-i],mandaty)[0]<mandaty/2:
                print("Minimalna liczba wyborców",i+1,"do uzyskania",int(mandaty/2),"mandatów.")
                break         

print("Zadanie 1")
zad1(dane)
print("Zadanie 2")
zad2(dane)
print("Zadanie 3")
zad3(dane)
print("Zadanie 4")
zad4(dane)
print("Zadanie 5")
zad5()
⚠️ **GitHub.com Fallback** ⚠️