Kalandozás a python programozás földjén.

Python, ahogy én ...

Érettségi 2019 (Cégautók)

2019. május 16. - d3c0d3r

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

A bejegyzés trackback címe:

https://python-kalandok.blog.hu/api/trackback/id/tr4114831078

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása