Nézzünk egy összetett logikai és adatszerkezeti kihívás (rekurzió, szótárak, fájlkezelés), amely kiválóan modellezi a hivatalos vizsgák emelt szintű nehézségi fokát. A feladat: Útvonal optimalizálás és statisztika, egy logisztikai cég adatbázisát dolgozzuk fel. A program célja a leghosszabb összefüggő szállítási lánc (rekurzív keresés) megtalálása, a megadott súlyhatár feletti csomagok szűrése és a statisztika fájlba írása.
-------------
# Részeredmények
def beolvasas():
# Szállítási adatok: forrás; cél; súly
file_content = """
Budapest;Szeged;12.5
Szeged;Debrecen;8.0
Debrecen;Miskolc;15.2
Miskolc;Eger;11.0
Budapest;Győr;9.5
Győr;Pécs;13.1
Pécs;Kaposvár;7.8
Kaposvár;Zalaegerszeg;10.7
"""
szallitasok = []
for sor in file_content.strip().splitlines():
adatok = sor.strip().split(';')
if len(adatok) == 3:
forras, cel, suly = adatok[0].strip(), adatok[1].strip(), float(adatok[2])
szallitasok.append({'forras': forras, 'cel': cel, 'suly': suly})
return szallitasok
def leghosszabb_lanc(aktualis_hely, szallitasok, meglatogatott):
max_utvonal = []
for szallitas in szallitasok:
if szallitas['forras'] == aktualis_hely and szallitas['cel'] not in meglatogatott:
uj_meglatogatott = meglatogatott.copy()
uj_meglatogatott.append(szallitas['cel'])
kovetkezo_ut = leghosszabb_lanc(szallitas['cel'], szallitasok, uj_meglatogatott)
if len(kovetkezo_ut) >= len(max_utvonal):
max_utvonal = [szallitas['cel']] + kovetkezo_ut
return max_utvonal
def kiiratas(eredmeny, fajlnev):
with open(fajlnev, 'w', encoding='utf-8') as f:
for allomas in eredmeny:
f.write(f"{allomas}\n")
def main():
adatok = beolvasas()
print(f"1. Beolvasva {len(adatok)} szállítási adat.")
osszes_suly = sum(item['suly'] for item in adatok)
print(f"2. Összes szállított súly: {osszes_suly:.2f} kg")
szurt_adatok = [s for s in adatok if s['suly'] > 10.0]
print(f"3. 10 kg feletti tételek száma: {len(szurt_adatok)}")
kezdo_allomas = 'Budapest'
leghosszabb_ut = leghosszabb_lanc(kezdo_allomas, adatok, [kezdo_allomas])
vegleges_ut = [kezdo_allomas] + leghosszabb_ut
print(f"4. Leghosszabb lánc {kezdo_allomas}-ról/ről indítva: {' -> '.join(vegleges_ut)}")
kiiratas(vegleges_ut, 'leghosszabb_lanc.txt')
print("5. Eredmény kiírva a 'leghosszabb_lanc.txt' fájlba.")
if __name__ == '__main__':
main()
---------------
1. Beolvasva 8 szállítási adat.
2. Összes szállított súly: 87.80 kg
3. 10 kg feletti tételek száma: 5
4. Leghosszabb lánc Budapest-ról/ről indítva: Budapest -> Szeged -> Debrecen -> Miskolc -> Eger
5. Eredmény kiírva a 'leghosszabb_lanc.txt' fájlba.
-----------------------
Futtatás; https://onecompiler.com/python#draft-tdxd
Nincsenek megjegyzések:
Megjegyzés küldése