1 adatok=[] #ez lesz a mátrixunk (listák listája) 2 3 #------------------------------------------------------------------------ 4 # 1. Olvassa be a szavazatok.txt fájl adatait, majd ezek felhasználásával 5 # oldja meg a következő feladatokat! Az adatfájlban legfeljebb 100 6 # képviselőjelölt adatai szerepelnek. 7 #------------------------------------------------------------------------ 8 print('1. feladat - adatok beolvasása') 9 10 fbe=open('szavazatok.txt','r') 11 12 for sor in fbe: 13 sor=sor.strip().split() #minden sort a fájlban listává alakítunk 14 #a "kis" listában az első két számot egész számmá konvertáljuk 15 sor[0]=int(sor[0]) 16 sor[1]=int(sor[1]) 17 adatok.append(sor) #megy a mátrixba (lista a listába) 18 19 fbe.close() 20 21 #------------------------------------------------------------------------ 22 # 2. Hány képviselőjelölt indult a helyhatósági választáson? A kérdésre 23 # egész mondatban válaszoljon az alábbi mintához hasonlóan: 24 # 25 # A helyhatósági választáson 92 képviselőjelölt indult. 26 #------------------------------------------------------------------------ 27 print('\n2. feladat\n') 28 print('A helyhatósági választáson %d képviselőjelölt indult.' %len(adatok)) 29 30 #------------------------------------------------------------------------ 31 # 3. Kérje be egy képviselőjelölt vezetéknevét és utónevét, majd írja ki 32 # a képernyőre, hogy az illető hány szavazatot kapott! 33 # Ha a beolvasott név nem szerepel a nyilvántartásban, úgy jelenjen 34 # meg a képernyőn az „Ilyen nevű képviselőjelölt nem szerepel a 35 # nyilvántartásban!” figyelmeztetés! A feladat megoldása során 36 # feltételezheti, hogy nem indult két azonos nevű képviselőjelölt a 37 # választáson. 38 #------------------------------------------------------------------------ 39 print('\n3. feladat\n') 40 41 vnev=input('Képviselőjelölt vezetékneve: ') 42 knev=input('Képviselőjelölt keresztneve: ') 43 nev=vnev+' '+knev 44 45 #lineáris keresés tétele 46 i=0 #kezdjük a legelsővel, ennek az indexe 0 47 while i<len(adatok) and (adatok[i][2]+' '+adatok[i][3]!=nev): 48 i+=1 49 50 if i<len(adatok): 51 print('Szavazatainak száma:',adatok[i][1]) 52 else: 53 print('Ilyen nevű képviselőjelölt nem szerepel a nyilvántartásban!') 54 55 #------------------------------------------------------------------------ 56 # 4. Határozza meg, hányan adták le szavazatukat, és mennyi volt a 57 # részvételi arány! (A részvételi arány azt adja meg, hogy a jogosul- 58 # tak hány százaléka vett részt a szavazáson.) 59 # A részvételi arányt két tizedesjegy pontossággal, százalékos formá- 60 # ban írja ki a képernyőre! Például: 61 # 62 # A választáson 5001 állampolgár, a jogosultak 40,51%-a vett részt. 63 #------------------------------------------------------------------------ 64 print('\n4. feladat\n') 65 #A városban összesen 12 345 szavazásra jogosult állampolgár van... 66 n=12345 67 #összegzés tétele 68 sz=0 #szavazók száma 69 for adat in adatok: 70 sz+=adat[1] 71 arany=sz/n*100 #egy kis matek 72 print(f'A választáson {sz} állampolgár, a jogosultak {arany:.2f}%-a vett részt.') 73 74 #------------------------------------------------------------------------ 75 # 5. Határozza meg és írassa ki a képernyőre az egyes pártokra leadott 76 # szavazatok arányát az összes leadott szavazathoz képest két tizedes- 77 # jegy pontossággal! A független jelölteket együtt, „Független jelöltek” 78 # néven szerepeltesse! 79 # Például: 80 # Zöldségevők Pártja= 12,34% 81 # Független jelöltek= 23,40% 82 #------------------------------------------------------------------------ 83 print('\n5. feladat\n') 84 85 #"szótártípus", hogy a rövidítésekhez meglegyenek a nevek 86 partnev={ 87 'GYEP':'Gyümölcsevők Pártja', 88 'HEP' :'Húsevők Pártja ', 89 'TISZ':'Tejivók Szövetsége ', 90 'ZEP' :'Zöldségevők Pártja ', 91 '-' :'Független jelöltek ' 92 } 93 94 #szedjük össze a pártokat egy halmazba (ott nincs ismétlődő érték) 95 partok=set() 96 for adat in adatok: 97 partok.add(adat[4]) 98 partok=list(partok) #alakítsuk listává, mert halmazban a sorrend 99 #esetleges, nem fix 100 print(partok) 101 #most összesítsük a pártokra leadott szavazatokat 102 #összesítés tétele speciálisan 103 104 for part in partok: #menjünk végig a pártokon 105 szavazat=0 #ebben összesítjük az adott párt szavazatát 106 for adat in adatok: #most pedig az adatokon menjünk végig 107 if adat[4]==part: #ha megfelelo part "jön", akkor 108 szavazat+=adat[1] #összesítjük a szavazatot 109 110 print(partnev[part]+f': {szavazat/n*100:.2f}%') #itt használjuk a "szótárat" 111 112 #------------------------------------------------------------------------ 113 # 6. Melyik jelölt kapta a legtöbb szavazatot? Jelenítse meg a képernyőn 114 # a képviselő vezetékés utónevét, valamint az őt támogató párt 115 # rövidítését, vagy azt, hogy független! Ha több ilyen képviselő is 116 # van, akkor mindegyik adatai jelenjenek meg! 117 #------------------------------------------------------------------------ 118 print('\n6. feladat\n') 119 120 #szélsőérték keresésekor szóba jöhet a rendezés 121 #a rendezés kulcsát (szempontját) egy lambda-kifejezéssel adjuk meg: 122 # lambda x:x[1] - x az adatok lista egy "kislistája", x[1] annak a 123 # második eleme, azaz a kapott szavazatok száma, 124 #és persze csökkenő sorrendbe rendezünk (reverse=True) 125 rendezett=sorted(adatok,key=lambda x:x[1],reverse=True) 126 127 #a maximális szavazatú a rendezett lista elején van... 128 #figyelni kell arra, hogy ha több maximális szavazatú van, mindegyiket kiírjuk 129 130 #a legelső (0 indexen) mehet is a képernyőre: 131 print(rendezett[0][2]+' '+rendezett[0][3]+' '+rendezett[0][4]) 132 #és akkor jöhet a többi (1-es indextől), ha van 133 i=1 134 while rendezett[i][1]==rendezett[i-1][1]: 135 #feltételes érték adás 136 vege='független' if rendezett[i][4]=='-' else rendezett[i][4] 137 print(rendezett[i][2]+' '+rendezett[i][3]+' '+vege) 138 i+=1 139 140 #------------------------------------------------------------------------ 141 # 7. Határozza meg, hogy az egyes választókerületekben kik lettek a 142 # képviselők! Írja ki a választókerület sorszámát, a győztes vezeték- 143 # és utónevét, valamint az őt támogató párt rövidítését, vagy azt, 144 # hogy független egy-egy szóközzel elválasztva a kepviselok.txt nevű 145 # szöveges fájlba! Az adatok a választókerületek száma szerinti 146 # sorrendben jelenjenek meg! 147 # Minden sorba egy képviselő adatai kerüljenek! 148 #------------------------------------------------------------------------ 149 print('\n7. feladat\n') 150 151 #rendezés nélküli megoldás 152 153 fki=open('kepviselok.txt','w') 154 #8 váasztókerület van, rendre: 1, 2, ..., 8 155 #rendezzük az adatokat: választókerület és azon belül szavazatszám... de 156 # fordított sorrendben 157 158 rendezett=sorted(adatok,reverse=True) 159 nyertesek=[] # ebbe kerülnek a győztesek adatai 160 nyertesek.append(rendezett[0]) # a rendezés miatt a 8. körzet nyertese 161 # már meg is van 162 i=1 # következőtől indulunk tovább 163 while len(nyertesek)<8: 164 if rendezett[i][0]!=rendezett[i-1][0]: # ha a körzet nem azonos, akkor 165 nyertesek.append(rendezett[i]) # jön egy győztes az új körzetből... 166 i+=1 167 168 for adat in reversed(nyertesek): 169 vege='független' if adat[4]=='-' else adat[4] 170 print(str(adat[0])+' '+adat[2]+' '+adat[3]+' '+vege) 171 print(str(adat[0])+' '+adat[2]+' '+adat[3]+' '+vege, file=fki) 172 173 fki.close() 174 #------------------------------------------------------------------------------- 175 # megoldás RENDEZÉSSEL!!!! 176 fki=open('kepviselok.txt','w') 177 # a lambda kifejezésben adjuk meg a rendezési kulcsot: 178 # két szempont van, elsődleges a választókerület (x[0]), növekvő sorrendben, 179 # azon belül a rendezési szempont a szavazat (x[1]), mínusz előjellel, ami 180 # csökkenő rendezést jelent 181 rendezett=sorted(adatok,key=lambda x:(x[0],-x[1])) 182 vk=0 183 for adat in rendezett: 184 if adat[0]!=vk: 185 vege='független' if adat[4]=='-' else adat[4] 186 print(f'{adat[0]} {adat[2]} {adat[3]} {vege}',file=fki) 187 vk=adat[0] 188 189 fki.close() 190 191 192 193