adatok=[]       #ez lesz a mátrixunk (listák listája)

#------------------------------------------------------------------------
# 1. Olvassa be a szavazatok.txt fájl adatait, majd ezek felhasználásával
#    oldja meg a következő feladatokat! Az adatfájlban legfeljebb 100
#    képviselőjelölt adatai szerepelnek.
#------------------------------------------------------------------------
print('1. feladat - adatok beolvasása')

fbe=open('szavazatok.txt','r')

for sor in fbe:
    sor=sor.strip().split()     #minden sort a fájlban listává alakítunk
    #a "kis" listában az első két számot egész számmá konvertáljuk
    sor[0]=int(sor[0])
    sor[1]=int(sor[1])
    adatok.append(sor)          #megy a mátrixba (lista a listába)

fbe.close()

#------------------------------------------------------------------------
# 2. Hány képviselőjelölt indult a helyhatósági választáson? A kérdésre
#    egész mondatban válaszoljon az alábbi mintához hasonlóan:
#
#           A helyhatósági választáson 92 képviselőjelölt indult.
#------------------------------------------------------------------------
print('\n2. feladat\n')
print('A helyhatósági választáson %d képviselőjelölt indult.' %len(adatok))

#------------------------------------------------------------------------
# 3. Kérje be egy képviselőjelölt vezetéknevét és utónevét, majd írja ki
#    a képernyőre, hogy az illető hány szavazatot kapott!
#    Ha a beolvasott név nem szerepel a nyilvántartásban, úgy jelenjen
#    meg a képernyőn az „Ilyen nevű képviselőjelölt nem szerepel a
#    nyilvántartásban!” figyelmeztetés! A feladat megoldása során
#    feltételezheti, hogy nem indult két azonos nevű képviselőjelölt a
#    választáson.
#------------------------------------------------------------------------
print('\n3. feladat\n')

vnev=input('Képviselőjelölt vezetékneve: ')
knev=input('Képviselőjelölt keresztneve: ')
nev=vnev+' '+knev

#lineáris keresés tétele
i=0     #kezdjük a legelsővel, ennek az indexe 0
while i<len(adatok) and (adatok[i][2]+' '+adatok[i][3]!=nev):
    i+=1
    
if i<len(adatok):
    print('Szavazatainak száma:',adatok[i][1])
else:
    print('Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!')

#------------------------------------------------------------------------
# 4. Határozza meg, hányan adták le szavazatukat, és mennyi volt a
#    részvételi arány! (A részvételi arány azt adja meg, hogy a jogosul-
#    tak hány százaléka vett részt a szavazáson.)
#    A részvételi arányt két tizedesjegy pontossággal, százalékos formá-
#    ban írja ki a képernyőre! Például:
#
#    A választáson 5001 állampolgár, a jogosultak 40,51%-a vett részt. 
#------------------------------------------------------------------------
print('\n4. feladat\n')
#A városban összesen 12 345 szavazásra jogosult állampolgár van...
n=12345
#összegzés tétele
sz=0        #szavazók száma
for adat in adatok:
    sz+=adat[1]
arany=sz/n*100      #egy kis matek
print(f'A választáson {sz} állampolgár, a jogosultak {arany:.2f}%-a vett részt.')

#------------------------------------------------------------------------
# 5. Határozza meg és írassa ki a képernyőre az egyes pártokra leadott
#    szavazatok arányát az összes leadott szavazathoz képest két tizedes-
#    jegy pontossággal! A független jelölteket együtt, „Független jelöltek”
#    néven szerepeltesse! 
#       Például: 
#           Zöldségevők Pártja= 12,34% 
#           Független jelöltek= 23,40%
#------------------------------------------------------------------------
print('\n5. feladat\n')

#"szótártípus", hogy a rövidítésekhez meglegyenek a nevek
partnev={
    'GYEP':'Gyümölcsevők Pártja',
    'HEP' :'Húsevők Pártja     ',
    'TISZ':'Tejivók Szövetsége ',
    'ZEP' :'Zöldségevők Pártja ',
    '-'   :'Független jelöltek '
    }

#szedjük össze a pártokat egy halmazba (ott nincs ismétlődő érték)
partok=set()
for adat in adatok:
    partok.add(adat[4])
partok=list(partok)        #alakítsuk listává, mert halmazban a sorrend
                            #esetleges, nem fix
print(partok)
#most összesítsük a pártokra leadott szavazatokat
#összesítés tétele speciálisan

for part in partok:     #menjünk végig a pártokon
    szavazat=0          #ebben összesítjük az adott párt szavazatát
    for adat in adatok: #most pedig az adatokon menjünk végig
        if adat[4]==part:       #ha megfelelo part "jön", akkor
            szavazat+=adat[1]   #összesítjük a szavazatot
    
    print(partnev[part]+f': {szavazat/n*100:.2f}%') #itt használjuk a "szótárat"
    
#------------------------------------------------------------------------
# 6. Melyik jelölt kapta a legtöbb szavazatot? Jelenítse meg a képernyőn
#    a képviselő vezetékés utónevét, valamint az őt támogató párt
#    rövidítését, vagy azt, hogy független! Ha több ilyen képviselő is
#    van, akkor mindegyik adatai jelenjenek meg! 
#------------------------------------------------------------------------
print('\n6. feladat\n')

#szélsőérték keresésekor szóba jöhet a rendezés
#a rendezés kulcsát (szempontját) egy lambda-kifejezéssel adjuk meg:
#       lambda x:x[1] - x az adatok lista egy "kislistája", x[1] annak a
#                       második eleme, azaz a kapott szavazatok száma,
#és persze csökkenő sorrendbe rendezünk (reverse=True)
rendezett=sorted(adatok,key=lambda x:x[1],reverse=True)

#a maximális szavazatú a rendezett lista elején van...
#figyelni kell arra, hogy ha több maximális szavazatú van, mindegyiket kiírjuk

#a legelső (0 indexen) mehet is a képernyőre:
print(rendezett[0][2]+' '+rendezett[0][3]+' '+rendezett[0][4])
#és akkor jöhet a többi (1-es indextől), ha van
i=1
while rendezett[i][1]==rendezett[i-1][1]:
    #feltételes érték adás
    vege='független' if rendezett[i][4]=='-' else rendezett[i][4]    
    print(rendezett[i][2]+' '+rendezett[i][3]+' '+vege)
    i+=1

#------------------------------------------------------------------------
# 7. Határozza meg, hogy az egyes választókerületekben kik lettek a
#    képviselők! Írja ki a választókerület sorszámát, a győztes vezeték-
#    és utónevét, valamint az őt támogató párt rövidítését, vagy azt,
#    hogy független egy-egy szóközzel elválasztva a kepviselok.txt nevű
#    szöveges fájlba! Az adatok a választókerületek száma szerinti 
#    sorrendben jelenjenek meg!
#    Minden sorba egy képviselő adatai kerüljenek! 
#------------------------------------------------------------------------
print('\n7. feladat\n')
   
fki=open('kepviselok.txt','w')

#8 váasztókerület van, rendre: 1, 2, ..., 8
#rendezzük az adatokat: választókerület és azon belül szavazatszám... de
#                       fordított sorrendben

rendezett=sorted(adatok,reverse=True)
nyertesek=[]                            # ebbe kerülnek a győztesek adatai
nyertesek.append(rendezett[0])          # a rendezés miatt a 8. körzet nyertese
                                        # már meg is van
i=1                                     # következőtől indulunk tovább
while len(nyertesek)<8:
    if rendezett[i][0]!=rendezett[i-1][0]:  # ha a körzet nem azonos, akkor
        nyertesek.append(rendezett[i])      # jön egy győztes az új körzetből...
    i+=1

for adat in reversed(nyertesek):
    vege='független' if adat[4]=='-' else adat[4]    
    print(str(adat[0])+' '+adat[2]+' '+adat[3]+' '+vege)
    print(str(adat[0])+' '+adat[2]+' '+adat[3]+' '+vege, file=fki)

fki.close()




