Python az iskolában Wiki
Advertisement

Első megoldás[]

Check Tesztelve a 3.6.1 verzióban.

# coding: utf-8
"""
2017. őszi közismereti érettségi, Hiányzások feladat
A megoldások sorrendjét a célszerűség diktálja.
"""

def f(i):
    print('%d. feladat:' % i)

# Először megoldom azt a két feladatot, amihez nem kell beolvasni a forrást.
# Pythonosítom a 4. feladatban megadott pszeudokódot ékezetekkel:
def hetnapja(honap, nap):
    napnev = \
        ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
    napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
    napsorszam = (napszam[honap - 1] + nap) % 7
    return napnev[napsorszam]

f(5)
datum = [int(i) for i in input('Adja meg a hónap és a nap sorszámát vesszővel elválasztva: ').split(',')]
# A következő sorban alkalmazott Python-specifikus rövidítő megoldás a kicsomagolás.
print('Ez a nap ' + hetnapja(*datum) + '.')

# 1. feladat
text = open('naplo.txt').readlines() # Lista lesz.

# Elvégzem az egyetlen további adatbekérést, hogy egy menetben oldhassak meg mindent.
f(6)
nap_ora = input('Kérem a nap nevét és az óra sorszámát szóközel elválasztva: ').split(' ')
nap = nap_ora[0]
ora = int(nap_ora[1])
hianyzas_sorok = 0
igazolt = 0
igazolatlan = 0
adott_ora = 0
aktualis_nap = ''
hianyzok = dict()
for line in text:
    if line.startswith('#'):
        datum = [int(n) for n in line.split(' ')[1:]]
        aktualis_nap = hetnapja(*datum)
    else:
        if len(line) > 1: # Hátha beolvasott üres sort.
            hianyzas_sorok += 1
            l = line.rsplit(' ', 1)
            neve = l[0]
            jelek = l[1]
            igazolt += jelek.count('X')
            igazolatlan += jelek.count('I')
            if aktualis_nap == nap and jelek[ora-1] in 'IX':
                adott_ora +=1
            hianyzok[neve] = hianyzok.get(neve,0) + jelek.count('X') + jelek.count('I')

print('%s %d. órában összesen %d hiányzás történt.' % \
    (nap.title(), ora, adott_ora))
f(2)
print('A naplóban %d bejegyzés van.' % hianyzas_sorok)

f(3)
print('Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.' % \
    (igazolt, igazolatlan))
    
f(7)
maxh = max(hianyzok.values())
print('A legtöbbet hiányzó tanulók: ' +
    ' '.join([k for k in hianyzok if hianyzok[k] == maxh]))

Második megoldás[]

Ambox important Ez a szócikk az érettségi követelményeket meghaladó ismeretet tartalmaz.

Check Tesztelve a 3.6.1 verzióban.

# coding: utf-8
"""
2017. őszi közismereti érettségi, Hiányzások feladat
Ez a megoldás sqlite adatbázist használ.
https://docs.python.org/3/library/sqlite3.html
"""

import sqlite3

def f(i):
    print('%d. feladat:' % i)

# Először megoldom azt a két feladatot, amihez nem kell beolvasni a forrást.
# Pythonosítom a 4. feladatban megadott pszeudokódot ékezetekkel:
def hetnapja(honap, nap):
    napnev = \
        ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
    napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
    napsorszam = (napszam[honap - 1] + nap) % 7
    return napnev[napsorszam]

f(5)
datum = [int(i) for i in input('Adja meg a hónap és a nap sorszámát vesszővel elválasztva: ').split(',')]
# A következő sorban alkalmazott Python-specifikus rövidítő megoldás a kicsomagolás.
print('Ez a nap ' + hetnapja(*datum) + '.')

# Előkészítem az adatbázist
conn = sqlite3.connect(':memory:') # A RAM-ban hoz létre adatbázist.
c = conn.cursor()
c.execute('CREATE TABLE naplo(nap text, neve text, jelek text, hiany integer)')

# 1. feladat
text = open('naplo.txt').readlines() # Lista lesz.

aktualis_nap = ''
for line in text:
    if line.startswith('#'):
        datum = [int(n) for n in line.split(' ')[1:]]
        aktualis_nap = hetnapja(*datum)
    else:
        if len(line) > 1: # Hátha beolvasott üres sort.
            l = line.rsplit(' ', 1)
            neve = l[0]
            jelek = l[1]
            hiany = jelek.count('I') + jelek.count('X')
            tup = (aktualis_nap, neve, jelek, hiany)
            c.execute('INSERT INTO naplo VALUES(?, ?, ?, ?)', tup)

f(2)
c.execute('SELECT total_changes()')
print('A naplóban %d bejegyzés van.' % c.fetchone())

f(3)
c.execute("SELECT group_concat(jelek, '') FROM naplo")
s = c.fetchone()
igazolt = s[0].count('X')
igazolatlan = s[0].count('I')
print('Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.' % \
    (igazolt, igazolatlan))
f(6)
nap_ora = input('Kérem a nap nevét és az óra sorszámát szóközel elválasztva: ').split(' ')
nap = nap_ora[0]
ora = int(nap_ora[1]) # A string viszi az aposztrófját a lekérdezésbe, ezért kell int.
sql = "SELECT sum(case when instr('IX', substr(jelek, ?, 1))>0 then 1 else 0 end) FROM naplo WHERE nap=?"
c.execute(sql, (ora, nap))
print('%s %d. órában összesen %d hiányzás történt.' % \
    (nap.title(), ora, c.fetchone()[0]))
   
f(7)
sql = "WITH osszes AS (select neve, sum(hiany) as ora from naplo group by neve), " + \
      "maximum as (select max(ora) as m from osszes), " + \
      "tagok AS (select neve from osszes inner join maximum on osszes.ora=maximum.m) " + \
      "SELECT group_concat(neve, ' ') FROM tagok"
c.execute(sql)
print('A legtöbbet hiányzó tanulók: ' + c.fetchone()[0])

Harmadik megoldás videón[]

Érettségi feladatok programozásból
2004 Személyazonosító jel

2005 LottóVigenère-tábla 2006 TelefonszámlaFehérjeZenei adók 2007 SMS-szavakFoci 2008 SMSRobot 2009 LiftAutomataÚtépítés 2010 HelyjegyTelekAnagramma 2011 SzójátékRejtvényPitypang 2012 FutárTörtekSzín-kép 2013 VálasztásokSzámokKözúti ellenőrzés 2014 IPv6CéllövészetNézőtér 2015 ExpedícióLatin táncokFej vagy írás 2016 ÖtszázZárTelefonos ügyfélszolgálat 2017 TesztversenyFürdőHiányzások 2018 TársalgóFogadóóraKerítés 2019 Céges autókTantárgyfelosztáseUtazás 2020 Meteorológiai jelentésMenetrendSorozatok 2021 GödrökBányató

Advertisement