hianyzas201710.py
1    def feladat(f):
2        print(f)
3    
4    # ----------------------------------------------------------
5    # 1. Olvassa be és tárolja el a naplo.txt fájl tartalmát!
6    # ----------------------------------------------------------
7    feladat('1. feladat - naplo.txt fájl beolvasása')
8    
9    fv = open('naplo.txt', 'r')
10   
11   adatok = []  # ez lesz a "mátrix"
12   adat = []  # ez a lista lesz a mátrix egy eleme
13   
14   for sor in fv:
15       sor = sor.split()
16       if sor[0] == '#':
17           eleje = (sor[1], sor[2])  # hónap, nap
18       else:
19           # a "mátrixba" kerül a hónap,nap mellé a név, és hiányzás
20           adat.append(eleje[0])  # hónap
21           adat.append(eleje[1])  # nap
22           adat.append(sor[0] + ' ' + sor[1])  # teljes név
23           adat.append(sor[2])  # hiányzások
24   
25           adatok.append(adat)  # adat lista adatok listába
26       adat = []
27   
28   fv.close()
29   
30   # ----------------------------------------------------------------
31   # 2. Határozza meg és írassa ki, hogy hány sor van a fájlban, ami
32   #    hiányzást rögzít! (A fenti példában 3 ilyen bejegyzés van.)
33   # ----------------------------------------------------------------
34   feladat('2. feladat - beolvasott hiányzások száma')
35   print('A naplóban %d bejegyzés van.' % len(adatok))
36   
37   # ----------------------------------------------------------------
38   # 3. Számolja meg és írassa ki, hogy összesen hány óra igazolt
39   #    és hány óra igazolatlan hiányzás volt a félév során!
40   # ----------------------------------------------------------------
41   feladat('3. feladat - igazolt, igazolatlan összesen')
42   
43   igazolt = 0
44   igazolatlan = 0
45   
46   for adat in adatok:
47       igazolt += adat[3].count('X')
48       igazolatlan += adat[3].count('I')
49   
50   kiir = 'Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.'
51   print(kiir % (igazolt, igazolatlan))
52   
53   # -----------------------------------------------------------------------
54   # 4. Készítsen függvényt hetnapja néven, amely a paraméterként megadott
55   #    dátumhoz (hónap, nap) megadja, hogy az a hét melyik napjára esik
56   #    (hétfő, kedd…). Tudjuk, hogy az adott év nem volt szökőév, továbbá
57   #    azt is, hogy január elseje hétfőre esett. Használhatja az alábbi
58   #    algoritmust is, ahol a tömbök indexelése 0-val kezdődik, de ettől
59   #    eltérő megoldású függvényt is készíthet.
60   #      Függvény hetnapja(honap:egesz, nap:egesz): szöveg
61   #        napnev[]:=("vasarnap","hetfo","kedd","szerda","csutortok",
62   #                   "pentek","szombat")
63   #        napszam[]:= (0,31,59,90,120,151,181,212,243,273,304,335)
64   #        napsorszam:= (napszam[honap-1]+nap) MOD 7
65   #        hetnapja:=napnev[napsorszam]
66   #      Függvény vége
67   # ----------------------------------------------------------------------
68   def hetnapja(honap, nap):
69       napev = [’vasarnap’, ’hetfo’, ’kedd’, ’szerda’, ’csutortok’, ’pentek’, ’szombat’]
70       napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
71       napsorszam = (napszam[honap - 1] + nap) % 7
72   
73       return napnev[napsorszam]
74   
75   # ----------------------------------------------------------------------
76   # 5. Kérjen be egy dátumot (hónap, nap), és a hetnapja függvény
77   #    felhasználásával írassa ki, hogy az a hét melyik napjára esett!
78   # ----------------------------------------------------------------------
79   feladat('5. feladat - adott hónap, nap milyen napra esik')
80   
81   honap = int(input('A hónap sorszáma='))
82   nap = int(input('A nap sorszáma='))
83   
84   hetnapja(honap, nap)
85   print('Azon a napon {} volt.'.format(hetnapja(honap, nap)))
86   
87   # ----------------------------------------------------------------------
88   # 6. Kérje be a hét egy tanítási napjának nevét és egy aznapi tanítási
89   #    óra óraszámát (például: kedd 3)! Írassa ki a képernyőre, hogy a
90   #    félév során az adott tanítási órára összesen hány hiányzás jutott!
91   # ----------------------------------------------------------------------
92   feladat('6. feladat - Adott napra, órára eső hiányzások száma')
93   
94   vizsgalando_nap = input('A nap neve=')
95   ora = int(input('Az óra sorszáma='))
96   # egyszerű feltételes összegzési algoritmus
97   hianyzas = 0
98   for adat in adatok:
99       honap = int(adat[0])
100      nap = int(adat[1])
101      if vizsgalando_nap == hetnapja(honap, nap):
102          if adat[3][ora - 1] == 'X' or adat[3][ora - 1] == 'I':
103              hianyzas += 1
104  
105  print('Ekkor összesen %d óra hiányzás történt.' % hianyzas)
106  
107  # ----------------------------------------------------------------------
108  # 7. Írassa ki a képernyőre a legtöbb órát hiányzó tanuló nevét!
109  #    Ha több ilyen tanuló is van, akkor valamennyi neve jelenjen meg
110  #    szóközzel elválasztva!
111  # ----------------------------------------------------------------------
112  feladat('7. feladat - Legtöbbet hiányzó tanulók')
113  
114  nevek = set()  # a neveket egy halmazban gyűjtjük...
115  
116  for adat in adatok:
117      nevek.add(adat[2])  # ...így minden név csak egyszer fog szerepelni
118  
119  statisztika = []
120  for nev in nevek:  # végig megyünk a neveken
121      hianyzas = 0  # egy adott névhez összegzünk
122      for adat in adatok:  # végig megyünk az összes adaton, és...
123          if nev == adat[2]:  # ha az éppen feldolgozandó név "jön", akkor...
124              hianyzas += adat[3].count('X')  # összegezzük a hiányzásokat
125              hianyzas += adat[3].count('I')
126      statisztika.append((hianyzas, nev))  # a listába kerül a hiányzás, név kettős
127  
128  statisztika = sorted(statisztika, reverse=True)  # rendezzük csökkenőbe
129  print('A legtöbbet hiányzó tanulók:', end=' ')
130  maxi = statisztika[0][0]  # a legnagyobb van elől
131  i = 0
132  while statisztika[i][0] == maxi:  # addig írjuk a neveket, amíg max hiányzás van
133      print(statisztika[i][1], end=' ')
134      i += 1
135  print('\n')
136  
137