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