A Hiányzások című feladatsor nem meglepő módon hiányzásokkal foglalkozik, mármint egy osztály tanulóinak hiányzásaival.
A bemenő fájl szerkezete viszonylag bonyolult, ezért már a beolvasás során átalakítjuk olyanra, hogy könnyebb legyen vele dolgoznunk. Olyasmit teszünk vele, amelyet nagy adattömeget mozgató valós programban nem tennénk: redundanciát viszünk abba az adatszerkezetbe, amelyben a fájlban lévő adatokat tároljuk, azaz lesznek olyan adataink, amelyeket “fölöslegesen” többször is tárolunk. Adatbázis-kezelésből kölcsönvett fogalommal az adatainkat denormalizáljuk, megkönnyítendő a feldolgozásukat.
A feladat szövege és a forrásfájl letölthető innen.
És hát, lássuk a megoldást:
Íme a videóbeli megoldás forráskódja:
#!/usr/bin/env python3 def hetnapja(honap, nap): napnev = ["vasarnap", "hetfo", "kedd", "szerda", "csutortok", 'pentek', "szombat"] napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335] napsorszam = (napszam[honap-1]+nap) % 7 hetnapja = napnev[napsorszam] return hetnapja napló = [] forrásfájl = open('naplo.txt') for sor in forrásfájl: sor = sor.strip().split() if sor[0] == '#': #dátumot találtunk hónap = int(sor[1]) nap = int(sor[2]) else: #hiányzás-bejegyzést találtunk vezetéknév = sor[0] keresztnév = sor[1] hiányzás = sor[2] napló.append([hónap, nap, vezetéknév + ' ' + keresztnév, hiányzás]) forrásfájl.close() print('2. feladat') print('A naplóban', len(napló), 'bejegyzés van.') print('3. feladat') igazolt = 0 igazolatlan = 0 for bejegyzés in napló: igazolt += bejegyzés[3].count('X') igazolatlan += bejegyzés[3].count('I') print('Az igazolt hiányzások száma', igazolt, 'az igazolatlanoké', igazolatlan, 'óra.') hónap = int(input('5. feladat\nA hónap sorszáma=')) nap = int(input('A nap sorszáma=')) print('Azon a napon', hetnapja(hónap, nap), 'volt.') napneve = input('6. feladat\nA nap neve=') órasorszáma = int(input('Az óra sorszáma=')) hiányzások = 0 for bejegyzés in napló: if hetnapja(bejegyzés[0], bejegyzés[1]) == napneve: if bejegyzés[3][órasorszáma-1] in ['X', 'I']: hiányzások += 1 print('Ekkor összesen', hiányzások, 'óra hiányzás történt.') print('7. feladat:') névhalmaz = set() for bejegyzés in napló: névhalmaz.add(bejegyzés[2]) hiányzáslista = [] for név in névhalmaz: hiányzások = 0 for bejegyzés in napló: if bejegyzés[2] == név: hiányzások = hiányzások + bejegyzés[3].count('X') + bejegyzés[3].count('I') hiányzáslista.append([név, hiányzások]) legnagyobb_hiányzás = 0 for bejegyzés in hiányzáslista: if bejegyzés[1] > legnagyobb_hiányzás: legnagyobb_hiányzás = bejegyzés[1] legtöbbet_hiányzók = [] for bejegyzés in hiányzáslista: if bejegyzés[1] == legnagyobb_hiányzás: legtöbbet_hiányzók.append(bejegyzés[0]) print('A legtöbbet hiányzók:', ' '.join(legtöbbet_hiányzók))
Sziasztok. Itt egy lehetséges forráskód a 2007-es októberi érettségi feladathoz, hátha segítség valakinek.
Saját megoldás szóval tessék fenntartásokkal kezelni. 🙂
https://pastebin.com/q3ffEt8m
KedvelésKedvelés