Feladat:
Egy cég 10 olyan autóval rendelkezik, amelyet a dolgozók igénybe vehetnek az üzleti ügyeik intézésére. Az autókat akár többnapos útra is elvihetik, illetve egy autót egy nap több dolgozó is elvihet. A rendszer az autók parkolóból való ki- és behajtását rögzíti. A parkoló a hónap minden napján 7-23 óra között van nyitva, csak ebben az időszakban lehet elvinni és visszahozni az autókat. Az autót mindig annak a dolgozónak kell visszahoznia, amelyik elvitte. Egyszerre csak egy autó lehet minden dolgozónál. Az autok.txt fájl egy hónap (30 nap) adatait rögzíti. Egy sorban szóközökkel elválasztva 6 adat található az alábbi sorrendben.
Folytatás: Leírás és forrásanyagok.
Megoldás:
Biztos van egyszerűbb megoldás is, de hirtelen felindulásból erre futotta. :)
class Auto: def __init__(self, nap, ido, rendszam, szemely, km, irany): self.nap = nap self.ido = ido self.rendszam = rendszam self.szemely = szemely self.km = km self.irany = 'ki' if irany == '0' else 'be' gr = [] # 1. feladat with open('autok.txt') as f: for line in f: l = line.strip().split() gr.append(Auto(int(l[0]), l[1], l[2], l[3], int(l[4]), l[5])) print('\n2. feladat') x = [x for x in gr[::-1] if x.nap == 30 and x.irany == 'ki'][0] print(f'30. nap rendszám: {x.rendszam}') print('\n3. feladat') nap = int(input('Nap: ')) print('Forgalom a(z) {nap}. napon:') [print(x.ido, x.rendszam, x.szemely, x.irany) for x in gr if x.nap == nap] print('\n4. feladat') ki = [x.irany for x in gr].count('ki') print(f'A hónap végén {ki - (len(gr) - ki)} autót nem hoztak vissza.') print('\n5. feladat') d = {} for x in gr: if x.rendszam in d: d[x.rendszam].append(x.km) else: d[x.rendszam] = [x.km] for k in sorted(d.keys()): print(k, max(d[k]) - min(d[k]), 'km') print('\nHatodik feldat') d = {} for i in range(1, 31): n = [x for x in gr if x.nap == i] for m in n: if m.szemely in d: d[m.szemely].append([m.rendszam, m.km]) else: d[m.szemely] = [[m.rendszam, m.km]] sofor = {} for k, v in d.items(): v = v[::-1] sofor[k] = 0 for i in range(len(v) % 2, len(v), 2): sofor[k] = max(sofor[k], v[i][1] - v[i + 1][1]) m = (sorted(sofor, key=sofor.get)) print(f'A leghosszabb út: {sofor[m[-1]]} km, személy: {m[-1]}') print('\n7. feladat') r = input('Rendszám: ').upper() auto = [x for x in gr if x.rendszam == r] sz = auto[0] with open(r + '_menetlevel.txt', 'w') as f: f.write(sz.szemely + '\t') for k in range(1, len(auto) + 1): try: f.write(f'\t{sz.nap}.\t{sz.ido}\t{sz.km}\t') if auto[k].szemely != sz.szemely: f.write(f'\n{auto[k].szemely}\t') sz = auto[k] except IndexError: # ha nem hozták vissza pass