|
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