|
kozutiellenorzes201310.py
|
1 def kiir(ssz, szoveg):
2 print('{}. feladat - {}'.format(ssz, szoveg))
3 # ------------------------------------------------------------------------------
4 # 1. Olvassa be a jarmu.txt állományban talált adatokat, s annak
5 # felhasználásával oldja meg a következő feladatokat!
6 # ------------------------------------------------------------------------------
7 kiir(1, 'Adatok beolvasása')
8 fbe = open('jarmu.txt', 'r')
9 adatok = [] # forrásadatokat tartalmazó mátrix: elemei 4 elemű listák
10 # [óra,perc.másodperc,rendszám]
11 for sor in fbe:
12 sor = sor.strip().split()
13 adatok.append(sor)
14 print('Beolvasott sorok száma:', len(adatok))
15 fbe.close()
16 # ------------------------------------------------------------------------------
17 # 2. Határozza meg, hogy aznap legalább hány óra hosszat dolgoztak az
18 # ellenőrzést végzők, ha munkaidejük egész órakor kezdődik, és pontosan
19 # egész órakor végződik! (Minden óra 0 perc 0 másodperckor kezdődik, és 59
20 # perc 59 másodperccel végződik.) Az eredményt jelenítse meg a képernyőn!
21 # ------------------------------------------------------------------------------
22 kiir(2, 'Munkaidő hossza')
23 # kihasználjuk, hogy a fájlunk elhaladás sorrendjében tartalmazza az adatokat
24 k = int(adatok[0][0])
25 v = int(adatok[-1][0]) + 1
26 print('Legalább {} órát dolgoztak!'.format(v - k))
27 # ------------------------------------------------------------------------------
28 # 3. Műszaki ellenőrzésre minden órában egy járművet választanak ki. Azt,
29 # amelyik abban az órában először halad arra. Az ellenőrzés óráját és az
30 # ellenőrzött jármű rendszámát jelenítse meg a képernyőn a következő
31 # formában: 9 óra: AB-1234! Minden óra adata külön sorba kerüljön! Csak
32 # azon órák adatai jelenjenek meg, amikor volt ellenőrizhető jármű!
33 # ------------------------------------------------------------------------------
34 kiir(3, 'Műszaki ellenőrzés')
35 # első adatot kiemeljük
36 print('{} óra: {}'.format(adatok[0][0], adatok[0][3]))
37 for i in range(len(adatok) - 1): # további adatsorokat nézzük db-1-ig i+1 index miatt
38 if adatok[i][0] != adatok[i + 1][0]: # ha aktuális és következő óra eltér,...
39 print('{} óra: {}'.format(adatok[i + 1][0], adatok[i + 1][3])) # következő ki
40 # ------------------------------------------------------------------------------
41 # 4. A rendszám első karaktere külön jelentéssel bír. Az egyes betűk közül
42 # a „B” autóbuszt, a „K” kamiont, az „M” motort jelöl, a többi rendszámhoz
43 # személygépkocsi tartozik. Jelenítse meg a képernyőn, hogy az egyes
44 # kategóriákból hány jármű haladt el az ellenőrző pont előtt!
45 # ------------------------------------------------------------------------------
46 kiir(4, 'Jármű kategóriák')
47 jkat = [0] * 4 # 'B'-busz,'K',-kamion,'M'-motor, minden más szgk. 4 kategória
48 hkat = set({'B', 'K', 'M'})
49 for adat in adatok:
50 if adat[3][0] == 'B':
51 jkat[0] += 1
52 if adat[3][0] == 'K':
53 jkat[1] += 1
54 if adat[3][0] == 'M':
55 jkat[2] += 1
56 if adat[3][0] not in hkat: # csak ezért kellett a hkat halmaz
57 jkat[3] += 1
58 j = ['Busz:', 'Kamion:', 'Motor:', 'Szgk:']
59 for i in range(4):
60 print(j[i], jkat[i])
61 # ------------------------------------------------------------------------------
62 # 5. Mettől meddig tartott a leghosszabb forgalommentes időszak? A választ
63 # jelenítse meg a képernyőn a következő formában: 9:9:13 - 9:15:3!
64 # ------------------------------------------------------------------------------
65 kiir(5, 'Forgalommentes időszak')
66
67 def mpbe(o, p, mp):
68 o = int(o)
69 p = int(p)
70 mp = int(mp)
71 return o * 3600 + p * 60 + mp
72
73 maxh = 0
74 # megkeressük két egymást követő idő közötti legnagyobb különbséget
75 for i in range(len(adatok) - 1):
76 ido_k = mpbe(adatok[i][0], adatok[i][1], adatok[i][2]) # aktuális
77 ido_v = mpbe(adatok[i + 1][0], adatok[i + 1][1], adatok[i + 1][2]) # következő
78 if ido_v - ido_k > maxh: # különbségük hasonlítása maximumhoz
79 maxh = ido_v - ido_k
80 index = i # megjegyezzük az indexet is
81 s = adatok[index][0] + ':' + adatok[index][1] + ':' + adatok[index][2] + ' - '
82 s = s + adatok[index + 1][0] + ':' + adatok[index + 1][1] + ':' + adatok[index + 1][2]
83 print('Leghosszabb forgalommentes időszak: ', s)
84 # ------------------------------------------------------------------------------
85 # 6. A rendőrök egy baleset közelében látott járművet keresnek rendszám
86 # alapján. A szemtanúk csak a rendszám bizonyos karaktereire emlékeztek,
87 # így a rendszám ismeretlen karaktereit a * karakterrel helyettesítve
88 # keresik a nyilvántartásban. Kérjen be a felhasználótól egy ilyen
89 # rendszámot, majd jelenítse meg a képernyőn az arra illeszthető
90 # rendszámokat!
91 # ------------------------------------------------------------------------------
92 kiir(6, 'Rendszámkeresés')
93 rsz = input('Keresett rendszám (ismeretlen karakter esetén *):')
94 talalat = 0
95 for i in range(len(adatok)):
96 azonos = 0
97 # keresett rendszám betűin megyünk végig
98 for j in range(len(rsz)):
99 # ha aktuális rendszám adott betűje megfelel vagy * van, akkor
100 if adatok[i][3][j] == rsz[j] or rsz[j] == '*':
101 azonos += 1 # növeljük az azonosság számlálót
102 if azonos == len(rsz): # ha minden karakterre volt egyezés vagy *, akkor
103 print(adatok[i][3]) # az a rendszám megfelel
104 talalat += 1 # volt találatunk
105 if talalat == 0:
106 print('Nincs ilyen rendszám!')
107 # ------------------------------------------------------------------------------
108 # 7. Egy közúti ellenőrzés pontosan 5 percig tart. Amíg az ellenőrzés
109 # folyik, a járművek szabadon elhaladhatnak, a következő megállítására
110 # csak az ellenőrzés befejezése után kerül sor. Ha a rendőrök a legelső
111 # járművet ellenőrizték, akkor mely járműveket tudták ellenőrizni a
112 # szolgálat végéig? Írja az ellenőrzött járművek áthaladási idejét és
113 # rendszámát a vizsgalt.txt állományba az áthaladás sorrendjében, a
114 # bemenettel egyező formában! Ügyeljen arra, hogy az időadatokhoz tartozó
115 # számok a bevezető nullákat tartalmazzák!
116 # ------------------------------------------------------------------------------
117 kiir(7, 'Vizsgálati adatok')
118 fki = open('vizsgalt.txt', 'w')
119 # a legelső adatsorban lévő autót megvizsgálták
120 s = ' '.join(adatok[0])
121 # ehhez képest nézzük a következőt majd
122 k = mpbe(adatok[0][0], adatok[0][1], adatok[0][2])
123 otperc = 5 * 60 # 300 mp eltérést kell keresnünk az egyes adatsorok között
124 print(s, file=fki)
125 for i in range(1, len(adatok)):
126 v = mpbe(adatok[i][0], adatok[i][1], adatok[i][2])
127 if v - k >= otperc: # ha van ilyen adat, akkor
128 print(' '.join(adatok[i]), file=fki) # kiírjuk
129 k = v # és ehhez nézzük majd a következőt
130 fki.close()
131