1 # ----------------------------------------------------------------------------------------------2 # 2024.10.22 emelt szintű digitális kultúra érettségi programozási feladat3 # ----------------------------------------------------------------------------------------------4 autok = dict() # az adatokat tároló szótár: KULCS a rendszám, ÉRTÉKEK a további adatok 5 kulcsok = list() # segédlista, melyben az egyedi rendszámokat tároljuk6 # ----------------------------------------------------------------------------------------------7 # 1. Olvassa be és tárolja el a további feldolgozáshoz a jeladas.txt állomány tartalmát!8 # ----------------------------------------------------------------------------------------------9 fbe = open('jeladas.txt','r')10 for sor in fbe:11 adatsor = sor.strip().split('\t') # lista a négy adattal (rendszám, óra, perc, sebesség)12 kulcs = adatsor[0] # tehát a kulcs a beolvasott adatsor legelső eleme13 ertek = list(map(int, adatsor[1:])) # kulcshoz tartozó értékek 3 elemű listák lesznek14 if kulcs not in kulcsok: # ha ez a kulcs még nem volt, akkor15 kulcsok.append(kulcs) # kulcsokhoz hozzáadjuk16 autok[kulcs] = [ertek] # szótárbejegyzés a kulcshoz (mátrix "elkezdése")17 else: 18 autok[kulcs].append(ertek) # ha már volt ilyen kulcs, akkor a bejegyzésének bővítése19 fbe.close()20 # ----------------------------------------------------------------------------------------------21 # 2. Állapítsa meg, hogy milyen időpontban történt a legutolsó jeladás, és írja a képernyőre22 # az időpontot, valamint az utoljára jelet adó autó rendszámát!23 # ----------------------------------------------------------------------------------------------24 print('2. feladat:')25 utolso_adat = adatsor # itt van egy kis "csalás", az előző for ciklus utolsó adatával dolgozunk :)26 ora = utolso_adat[1]27 perc = utolso_adat[2]28 rendszam = utolso_adat[0]29 print(f'Az utolsó jeladás időpontja {ora}:{perc}, a jármű rendszáma {rendszam}')30 # ----------------------------------------------------------------------------------------------31 # 3. Írja ki a bemeneti állományban elsőként szereplő jármű rendszámát, valamint azt, hogy32 # milyen időpontokban adott jelzést! Az időpontokat óra:perc formátumban, szóközzel33 # elválasztva, egy sorban jelenítse meg!34 # ----------------------------------------------------------------------------------------------35 print('3. feladat:')36 elso_rendszama = kulcsok[0] # itt használjuk a segédlistát, mert abban a forrással 37 # megegyező sorrendben vannak a rendszámok38 print(f'Az első jármű: {elso_rendszama}')39 print('Jeladásainak időpontjai:', end = ' ')40 [print(f'{adatok[0]}:{adatok[1]}',end = ' ') for adatok in autok[elso_rendszama]] 41 print()42 # ----------------------------------------------------------------------------------------------43 # 4. Kérje be a felhasználótól egy időpont óra és perc értékét, és adja meg, hogy hány jeladás44 # történt az adott időpontban! Ha nem történt jeladás, akkor 0-t írjon ki!45 # ----------------------------------------------------------------------------------------------46 print('4. feladat:')47 ora = int(input('Kérem, adja meg az órát: ')) # 648 perc = int(input('Kérem, adja meg a percet: ')) # 5449 jeladasok_szama = 050 for ertekek in autok.values(): # a szótár egy bejegyzése egy lista, melyben51 for ertek in ertekek: # 3 elemű listák vannak, ezen a három elemen is végig megyünk52 if ertek[0] == ora and ertek[1] == perc:53 jeladasok_szama +=154 print(f'A jeladások száma: {jeladasok_szama}')55 # ----------------------------------------------------------------------------------------------56 # 5. Állapítsa meg, hogy mennyi az adatok szerint a legnagyobb sebesség, amellyel egy jármű57 # a jeladáskor haladt, illetve adja meg az összes autó rendszámát, ami haladt ilyen58 # sebességgel! Amennyiben egy jármű többször is haladt a legnagyobb sebességgel, akkor a 59 # rendszámát többször is megjelenítheti. A rendszámokat egy sorban, szóközzel elválasztva 60 # jelenítse meg a minta szerint!61 # ----------------------------------------------------------------------------------------------62 print('5. feladat:')63 max_sebesseg = max((max(ertekek, key=lambda x: x[2])[2] for ertekek in autok.values()))64 rendszamok_hozza = [kulcs for kulcs, ertekek in autok.items() if any(elem[2] == max_sebesseg for elem in ertekek)]65 print(f'A legnagyobb sebesség km/h: {max_sebesseg}') # 15466 print('A járművek:', end = ' ')67 [print(rendszam, end = ' ') for rendszam in rendszamok_hozza] 68 print()69 # ---------------------------70 # FENTIEK "KIBONTVA:"71 # ---------------------------72 maxok=[]73 for ertekek in autok.values(): # szótárbejegyzések bejárása74 maxi = max(ertekek, key = lambda ertek:ertek[2]) # maxi: egy olyan 3 elemű lista a bejegyzésből, amelyben75 maxok.append(maxi) # a 3. elem (2-es index) a legnagyobb, és ezeket "gyűjtöm"76 77 max_sebesseg = max(maxok, key = lambda ertek:ertek[2]) # a kigyűjtött "kis" listákból kivesszük a legnagyobb 78 # 3. elemmel rendelkezőt79 max_sebesseg = max_sebesseg[2] # a kiválasztottból pedig a konkrét maximális értéket a 3. helyről80 81 rendszamok_hozza = [] # kik tartoznak a maximális sebességhez, keressük a kulcsokat82 for kulcs, ertekek in autok.items():83 for elem in ertekek:84 if elem[2] == max_sebesseg:85 rendszamok_hozza.append(kulcs)86 print(f'A legnagyobb sebesség km/h: {max_sebesseg}') # 15487 print('A járművek:', end = ' ')88 [print(rendszam, end = ' ') for rendszam in rendszamok_hozza] 89 print()90 # ----------------------------------------------------------------------------------------------91 # 6. Kérje be a felhasználótól egy jármű rendszámát, és jelenítse meg a jármű jeladásainak92 # időpontját és az adott rendszámú autó távolságát az útszakasz kezdetétől! A bevezető93 # példában az első jármű esetén a 6:04-kor a jármű távolsága az útszakasz kezdetétől 0,0 km,94 # míg 6:14-kor 15,8 km, mivel a jármű az eltelt 10 perc (10/60 óra) alatt 95 km/h-val haladt.95 # A kimenetet a mintának megfelelőn alakítsa ki, a távolságot minden esetben egy96 # tizedesjegyre kerekítve írja ki km mértékegységben! Ha nem szerepel a bekért rendszámmal97 # jármű, akkor azt egy rövid mondatban jelezze a felhasználónak!98 # ----------------------------------------------------------------------------------------------99 def eltelt_ido(elozo, aktualis):100 return (aktualis[0] * 60 + aktualis[1]) - (elozo[0] * 60 + elozo[1])101 102 print('6. feladat:')103 rendszam = input('Kérem, adja meg a rendszámot: ') # ZVJ-638104 if rendszam not in kulcsok: # megint a segédlista, ugye :)105 print('Nincs ilyen rendszám!')106 else:107 auto = autok[rendszam] # adott kulcshoz tartozó adatlista az "auto"108 tavolsag = 0.0109 print(f'{auto[0][0]}:{auto[0][1]} {tavolsag:.1f} km')110 for i in range(1,len(auto)): # legelső 3 elemű listát kihagyjuk (azt már feldolgoztuk)111 ido = eltelt_ido(auto[i-1],auto[i]) # i-1. az előző, i. az aktuális "kis" lista112 tavolsag += auto[i-1][2] * (ido / 60) # s = v * t, az előző sebességgel (i-1) jön eddig113 print(f'{auto[i][0]}:{auto[i][1]} {tavolsag:.1f} km') # adott időpontban eddig jutott114 # ----------------------------------------------------------------------------------------------115 # 7. Készítsen egy ido.txt szöveges állományt, amelynek mindegyik sorában egy-egy jármű 116 # rendszáma, illetve első és utolsó jeladásának óra és perc értéke szerepeljen! 117 # Az állományban minden jármű pontosan egyszer forduljon elő tetszőleges sorrendben!118 # ----------------------------------------------------------------------------------------------119 fki = open('ido.txt','w')120 for kulcs, ertekek in autok.items():121 print(f'{kulcs} {ertekek[0][0]} {ertekek[0][1]} {ertekek[-1][0]} {ertekek[-1][1]}', file = fki)122 fki.close()123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141