valasztas201305.py
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