nezok202110ksz_AB_Python.py
1    from statistics import mean as atlag
2    nezok=dict()
3    meccsek=dict()
4    belepesek=list()
5    
6    # -------------------- segédfüggvények --------------------
7    
8    # - 1. feladathoz: szótárak feltöltése a fájlokból
9    def dict_feltolt(fajl,szotar):
10       fbe=open(fajl,'r')
11       for sor in fbe:
12           sor=sor.strip().split()
13           kulcs=int(sor[0])
14           ertek=sor[1:]
15           szotar[kulcs]=ertek
16           
17   # - 1. feladathoz: egy lista index előtti elemeit egészre alakítja    
18   def to_int(lista,index):
19       lista[0:index]=map(int,lista[0:index])
20       return lista
21   
22   # 4. feladathoz: meccsek szótár bejegyzése (lista) megfelelő indexű elemének növelése 1-gyel
23   def novel(kulcs,i,ertek):    
24       meccsek[kulcs][i]+=ertek
25           
26   # ----------------- segédfüggvények vége -----------------
27   
28   def F1():
29       dict_feltolt('nezo.txt',nezok)
30       dict_feltolt('meccs.txt',meccsek)
31       [belepesek.append(to_int(belepes,2)) for belepes in [sor.strip().split() for sor in open('belepes.txt','r')]]
32   
33   def F2():
34       print('2. feladat')
35       print('Bajnoki mérkőzések időrendben:')
36       [print(datum) for datum in sorted([meccs[0] for meccs in meccsek.values() if meccs[3]=='bajnoki'])]
37   
38   def F3():
39       print('3. feladat')
40       # szótár rendezése dátum szerint csökkenő sorrendbe
41       datum_szerint=next(iter(sorted(meccsek.items(),key=lambda x:x[1][0],reverse=True)))
42       # datum_szerint egy tuple lesz: (8, ['2019.05.18', '16:00', '500', 'bajnoki'])    
43       print(f'A legutolsó ({datum_szerint[1][0]}) bajnokin a jegyár {datum_szerint[1][2]} Ft.')
44   
45   def F4():
46       print('4. feladat')
47       print('Nézőszámok az egyes meccseken, időrendben:')
48       # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
49       [meccsek[key].append(0) for key in meccsek.keys()]
50       # az új adat növelése a belépések alapján (belépésben szereplő meccsid, mint kulcs, felhasználásával)
51       [novel(belepes[1],4,1) for belepes in belepesek]
52       # dátum szerint rendezett szótár ---> elemei tuple-k, pl.: (18, ['2018.08.11', '17:00', '500', 'bajnoki', 135])
53       [print(ertek[1][0],' ',ertek[1][4]) for ertek in sorted(meccsek.items(),key=lambda x:x[1][0])]
54           
55   def F5():
56       print('5. feladat')
57       print('Jegybevétel 2018 szeptemberében (Ft):')
58       # a belépések egy eleme: a belépés (b), melynek 0. eleme a nézők kulcsa, az 1. eleme a meccsek kulcsa
59       # a nezők adott kulcsú eleme egy lista, 3-as indexű eleme: bérletes vagy nem ('-1'/'0')
60       # a meccsek adott kulcsú eleme egy lista, 2-es indexű eleme a belépő ára, 0 indexű eleme a dátum
61       # ................ belépő ....... belépés .............. nem bérletes ..... és ........ jó a dátum .............
62       print(sum([int(meccsek[b[1]][2]) for b in belepesek if nezok[b[0]][3]=='0' and meccsek[b[1]][0][0:7]=='2018.09']))
63               
64   def F6():
65       print('6. feladat')
66       print('Kiss Dorina és Varga Zsolt ezeken a meccseken voltak együtt:')
67       dorina=set(meccsek[b[1]][0] for b in belepesek if nezok[b[0]][0]=='Kiss' and nezok[b[0]][1]=='Dorina')
68       zsolt=set(meccsek[b[1]][0] for b in belepesek if nezok[b[0]][0]=='Varga' and nezok[b[0]][1]=='Zsolt')    
69       [print(datum) for datum in sorted(dorina&zsolt)]
70   
71   def F7():
72       print('7. feladat')
73       print('A legtöbb bevételt hozó meccs dátuma:')
74       # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
75       [meccsek[key].append(0) for key in meccsek.keys()]          # bevétel
76       # az új adat növelése a belépésben szereplő meccsid, mint kulcs, felhasználásával, ha a néző nem bérletes
77       [novel(b[1],5,int(meccsek[b[1]][2])) for b in belepesek if nezok[b[0]][3]=='0']
78       # bevétel szerint rendezett szótár ---> elemei tuple-k, pl.: (18, ['2018.08.11', '17:00', '500', 'bajnoki', 135, 49500])
79       print(next(iter(sorted(meccsek.items(),key=lambda x:x[1][5],reverse=True)))[1][0])
80   
81   def F8():
82       print('8. feladat')
83       print('Bérletes nézők átlagos száma a bajnokság során:')
84       # meccsek szótár bejegyzéseinek bővítése egy új adattal (int), nulla kezdőértékkel
85       [meccsek[key].append(0) for key in meccsek.keys()]          # bérletesek száma az adott meccsen
86       # az új adat növelése 1-gyel a belépésben szereplő meccsid, mint kulcs, felhasználásával, ha a néző bérletes
87       [novel(b[1],6,1) for b in belepesek if nezok[b[0]][3]=='-1']
88       
89       print(f'{round(atlag([meccs[6] for meccs in meccsek.values()]),0):.0f} fő (kerekítve)')
90   
91   # ----------------- FŐMODUL -----------------
92       
93   F1()
94   F2()
95   F3()
96   F4()
97   F5()
98   F6()
99   F7()
100  F8()
101