1 menetrend=[] #mátrix: "táblázatszerűen a fájlban lévő adatok (listák listája) 2 3 # Az első szám a vonatazonosító, a második az állomásazonosító, a harmadik és 4 # negyedik egy időpont órája és perce. A karakter pedig azt jelzi, hogy a vonat 5 # az adott állomásra érkezik (E) vagy éppen indul (I) a megadott időben. 6 7 #------------------------------------------------------------------------------------------ 8 # 1. Olvassa be és tárolja el a vonat.txt fájl tartalmát! 9 #------------------------------------------------------------------------------------------ 10 def F1(): 11 fbe=open('vonat.txt','r') 12 allomasok=set() 13 vonatok=set() 14 global m2,vegallomas 15 16 m=[] 17 for sor in fbe: 18 sor=[int(adat) if adat.isdigit() else adat for adat in sor.strip().split('\t')] 19 vonatok.add(sor[0]) 20 allomasok.add(sor[1]) 21 menetrend.append(sor) 22 # m - egy újabb mátrix, csak ebben az óra és perc helyett percekben van az idő 23 m.append([sor[0],sor[1],sor[2]*60+sor[3],sor[4]]) 24 m2=sorted(m) #rendezni kell a 3. feladat miatt - a rendezés a vonatszámok 25 #alapján történik 26 fbe.close() 27 F2(allomasok, vonatok) 28 vegallomas=max(allomasok) 29 #------------------------------------------------------------------------------------------ 30 # 2. Írja a képernyőre a fájlban tárolt vonatok és állomások darabszámát – a kezdő és 31 # végállomást is beleértve! 32 #------------------------------------------------------------------------------------------ 33 def F2(allomasok, vonatok): 34 print('2. feladat') 35 print('Az állomások száma: %d' %len(allomasok)) 36 print('A vonatok száma: %d' %len(vonatok)) 37 #------------------------------------------------------------------------------------------ 38 # 3. Határozza meg, hogy melyik állomáson állt legtöbbet vonat! Adja meg a vonat és az 39 # állomás azonosítóját, valamint az állás idejét! Ha több ilyen volt, elég csak az 40 # egyiket megadnia. 41 #------------------------------------------------------------------------------------------ 42 def F3(): 43 # Az adatok időrendben szerepelnek, azon belül pedig 44 # – az induló állomás kivételével – az érkezés mindig megelőzi az indulást 45 print('3. feladat') 46 print(m2) 47 maxido=0 48 for i in range(1,len(m2)-2): 49 if m2[i][0]==m2[i+1][0]: 50 if m2[i+1][2]-m2[i][2]>maxido: 51 #érkezik-indul egy adott állomás esetén 52 maxhely=i 53 maxido=m2[i+1][2]-m2[i][2] 54 vonat=m2[maxhely][0] 55 allomas=m2[maxhely][1] 56 print('A(z) %d. vonat a(z) %d. állomáson %d percet állt.' %(vonat,allomas,maxido)) 57 #------------------------------------------------------------------------------------------ 58 # 4. Olvassa be egy vonat azonosítóját, valamint egy időpont óra és perc értékét! A későbbi 59 # feladatokban használja ezeket! 60 #------------------------------------------------------------------------------------------ 61 def F4(): 62 print('4. feladat') 63 global vonatszam,idopont,idopont_percben 64 vonatszam=int(input('Adja meg egy vonat azonosítóját! ')) 65 idopont=input('Adjon meg egy időpontot (óra perc)! ').strip().split() 66 idopont_percben=int(idopont[0])*60+int(idopont[1]) 67 #------------------------------------------------------------------------------------------ 68 # 5. Ezen a vonalon az előírt menetidő 2 óra 22 perc. Írja a képernyőre, hogy a beolvasott 69 # azonosítójú vonat hány perccel tért el ettől! Például: „A(z) 5. vonat útja 2 perccel 70 # rövidebb volt az előírtnál.”, „A(z) 5. vonat útja pontosan az előírt ideig tartott.” 71 # vagy „A(z) 5. vonat útja 3 perccel hosszabb volt az előírtnál.” 72 #------------------------------------------------------------------------------------------ 73 def F5(): 74 print('5. feladat') 75 # előírt menetidő 2 óra 22 perc 76 eloirt=2*60+22 77 # keressük meg az adott vonat indulását, a vonatszám biztosan szerepel az adatok között 78 i=0 79 while menetrend[i][0]!=vonatszam: 80 i+=1 81 indulas=menetrend[i][2]*60+menetrend[i][3] 82 # keressük meg az adott vonat végállomásra érkezését 83 i=len(menetrend)-1 84 while menetrend[i][0]!=vonatszam: 85 i-=1 86 erkezes=menetrend[i][2]*60+menetrend[i][3] 87 menetido=erkezes-indulas 88 elter=eloirt-menetido # <0: hosszabb; >0: rövidebb; ==0: pont oké 89 if elter>0: 90 print(f'A(z) {vonatszam}. vonat útja {elter} perccel rövidebb volt az előírtnál.') 91 elif elter==0: 92 print(f'A(z) {vonatszam}. vonat útja pontosan az előírt ideig tartott.') 93 else: 94 print(f'A(z) {vonatszam}. vonat útja {abs(elter)} perccel hosszabb volt az előírtnál.') 95 #------------------------------------------------------------------------------------------ 96 # 6. Írja a haladX.txt fájlba, hogy a beolvasott azonosítójú vonat melyik állomásra mikor 97 # érkezett! A fájlnévben az X helyére a beolvasott vonatazonosító kerüljön! 98 #------------------------------------------------------------------------------------------ 99 def F6(): 100 fnev='halad'+str(vonatszam)+'.txt' 101 fki=open(fnev,'w') 102 for adat in menetrend: 103 if adat[0]==vonatszam and adat[4]=='E': 104 print(str(adat[1])+'. állomás: '+str(adat[2])+':'+str(adat[3]),file=fki) 105 fki.close() 106 #------------------------------------------------------------------------------------------ 107 # 7. Adja meg, hogy a beolvasott időpontban úton lévő, azaz a már elindult, de a 108 # végállomást még el nem érő vonatok közül melyik hol tartott! A tesztelés során a 109 # következő időpontokra érdemes figyelni: 6:50, 8:45, 9:05, 10:04, 10:20. 110 #------------------------------------------------------------------------------------------ 111 def F7(): 112 print('7. feladat') 113 for i in range(0,len(m2)-1): 114 akt=m2[i] 115 kov=m2[i+1] 116 elindult=(i%2==0) 117 if akt[0]==kov[0]: #ugyanarról a vonatról van szó 118 if akt[2]<=idopont_percben and idopont_percben<kov[2]: 119 #úton van (illetve éppen elindult) vagy éppen áll 120 if elindult: 121 print(f'A(z) {akt[0]}. vonat a(z) {akt[1]}. és a(z) {kov[1]}. állomás között járt.') 122 else: 123 print(f'A(z) {akt[0]}. vonat a(z) {akt[1]}. állomáson állt.') 124 125 #------------------------------F Ő M O D U L----------------------------------------------- 126 F1() 127 F3() 128 F4() 129 F5() 130 F6() 131 F7() 132