konyvek_szotar_202505emelt.py
1    def beolvasas(fajlnev):
2        with open(fajlnev, encoding='utf-8') as f:
3            sorok = [sor.strip().split(';') for sor in f]
4            adatok = [
5                {
6                    'ev': int(s[0]),
7                    'negyedev': int(s[1]),
8                    'eredet': s[2],
9                    'leiras': s[3],
10                   'peldanyszam': int(s[4])
11               }
12               for s in sorok
13           ]
14       return adatok
15   
16   
17   def szerzo_keres(adatok):
18       print("2. feladat:")
19       szerzo = input("Szerző: ")
20       db = sum(1 for adat in adatok if szerzo in adat['leiras'])
21       if db == 0:
22           print("Nem adtak ki")
23       else:
24           print(f"{db} könyvkiadás")
25   
26   
27   def legnagyobb_peldanyszam(adatok):
28       print("3. feladat:")
29       max_peldany = max(adat['peldanyszam'] for adat in adatok)
30       db = sum(1 for adat in adatok if adat['peldanyszam'] == max_peldany)
31       print(f"Legnagyobb példányszám: {max_peldany}, előfordult {db} alkalommal")
32   
33   
34   def elso_40000_kulfoldi(adatok):
35       print("4. feladat:")
36       for adat in adatok:
37           if adat['eredet'] == 'kf' and adat['peldanyszam'] >= 40000:
38               print(f"{adat['ev']}/{adat['negyedev']}. {adat['leiras']}")
39               break
40   
41   
42   def statisztika(adatok):
43       print("5. feladat:")
44       stat = {}
45       for adat in adatok:
46           ev = adat['ev']
47           if ev not in stat:
48               stat[ev] = {'ma': {'db': 0, 'osszeg': 0}, 'kf': {'db': 0, 'osszeg': 0}}
49           stat[ev][adat['eredet']]['db'] += 1
50           stat[ev][adat['eredet']]['osszeg'] += adat['peldanyszam']
51   
52       print("Év\tMagyar kiadás\tMagyar példányszám\tKülföldi kiadás\tKülföldi példányszám")
53       for ev in sorted(stat):
54           sor = stat[ev]
55           print(f"{ev}\t{str(sor['ma']['db']).rjust(5)}\t\t{str(sor['ma']['osszeg']).rjust(10)}\t\t{str(sor['kf']['db']).rjust(5)}\t\t{str(sor['kf']['osszeg']).rjust(10)}")
56   
57       with open("tabla.html", "w", encoding="utf-8") as f:
58           f.write("<table>\n")
59           f.write("<tr><th>Év</th><th>Magyar kiadás</th><th>Magyar példányszám</th><th>Külföldi kiadás</th><th>Külföldi példányszám</th></tr>\n")
60           for ev in sorted(stat):
61               sor = stat[ev]
62               f.write(f"<tr><td>{ev}</td><td>{sor['ma']['db']}</td><td>{sor['ma']['osszeg']}</td><td>{sor['kf']['db']}</td><td>{sor['kf']['osszeg']}</td></tr>\n")
63           f.write("</table>\n")
64   
65   
66   def ujra_kiadott(adatok):
67       print("6. feladat:")
68       print("Legalább kétszer, nagyobb példányszámban újra kiadott könyvek:")
69       konyvek = {}
70       for adat in adatok:
71           leiras = adat['leiras']
72           if leiras not in konyvek:
73               konyvek[leiras] = []
74           konyvek[leiras].append(adat['peldanyszam'])
75   
76       for leiras, peldanyok in konyvek.items():
77           # peldanyok.sort()
78           elso = peldanyok[0]
79           nagyobbak = [p for p in peldanyok[1:] if p > elso]
80           if len(nagyobbak) >= 2:
81               print(leiras)
82   
83   
84   def main():
85       adatok = beolvasas("kiadas.txt")  # vagy "kiadas2.txt"
86       szerzo_keres(adatok)
87       legnagyobb_peldanyszam(adatok)
88       elso_40000_kulfoldi(adatok)
89       statisztika(adatok)
90       ujra_kiadott(adatok)
91   
92   
93   if __name__ == "__main__":
94       main()