1 forgalom=[] #mátrix (listák listája) az adatok tárolására 2 #------------------------------------------------------------------------------ 3 # 1. Olvassa be és tárolja el az utasadat.txt fájl tartalmát! 4 #------------------------------------------------------------------------------ 5 print('1.feladat - adatbeolvasás') 6 7 #forgalom=[sor.strip().split() for sor in open('utasadat.txt','r')] 8 9 fbe=open('utasadat.txt','r') 10 for sor in fbe: 11 sor=sor.strip().split() 12 forgalom.append(sor) 13 fbe.close() 14 15 #------------------------------------------------------------------------------ 16 # 2. Adja meg, hogy hány utas szeretett volna felszállni a buszra! 17 #------------------------------------------------------------------------------ 18 print('2. feladat') 19 print(f'A buszra {len(forgalom)} utas akart felszállni.') 20 print('A buszra %d utas akart felszállni.' %len(forgalom)) 21 22 #------------------------------------------------------------------------------ 23 # 3.A közlekedési társaság szeretné, ha a járművőn csak az érvényes jeggyel 24 # vagy bérlettel rendelkezők utaznának. Ezért a jegyeket és bérleteket a 25 # buszvezető a felszálláskor ellenőrzi. (A bérlet még érvényes a lejárat 26 # napján.) Adja meg, hogy hány esetben kellett a buszvezetőnek elutasítania 27 # az utas felszállását, mert lejárt a bérlete vagy már nem volt jegye! 28 #------------------------------------------------------------------------------ 29 print('3. feladat') 30 nem=0 31 for sor in forgalom: 32 if sor[4]=='0': #jegy, de már felhasználta az összeset 33 nem+=1 34 if sor[3]!='JGY' and sor[1][0:8]>sor[4]: #nem jegy, de lejárt a bérlet 35 nem+=1 36 37 print(f'A buszra {nem} utas nem szállhatott fel.') 38 39 #------------------------------------------------------------------------------ 40 # 4.Adja meg, hogy melyik megállóban próbált meg felszállni a legtöbb utas! 41 # (Több azonos érték esetén a legkisebb sorszámút adja meg!) 42 #------------------------------------------------------------------------------ 43 print('4. feladat') 44 45 felszall=[0]*30 #30 helyen lehet felszállni és a megaáálók sorszáma: 46 #0,1,...,29 azaz pont indexelhet egy 30 elemű listát! 47 48 for sor in forgalom: 49 felszall[int(sor[0])]+=1 #a megálló sorszámával indexelt elem növelése 50 51 print(f'A legtöbb utas ({max(felszall)} fő) a {felszall.index(max(felszall))}. megállóban próbált felszállni.') 52 53 #------------------------------------------------------------------------------ 54 # 5.A közlekedési társaságnak kimutatást kell készítenie, hogy hányszor utaztak 55 # valamilyen kedvezménnyel a járművön. Határozza meg, hogy hány kedvezményes 56 # és hány ingyenes utazó szállt fel a buszra! (Csak az érvényes bérlettel 57 # rendelkező szállhatott fel a buszra!) 58 #------------------------------------------------------------------------------ 59 print('5. feladat') 60 61 ingyenes=0 62 kedvezmeny=0 63 for sor in forgalom: 64 if sor[3]!='JGY' and sor[1][0:8]<=sor[4]: #nem jegy, de érvényes a bérlet 65 if sor[3]=='NYP' or sor[3]=='RVS' or sor[3]=='GYK': 66 ingyenes+=1 67 if sor[3]=='TAB' or sor[3]=='NYB': 68 kedvezmeny+=1 69 70 print(f'Ingyenesen utazók száma: {ingyenes} fő') 71 print(f'A kedvezményesen utazók száma: {kedvezmeny} fő') 72 73 #------------------------------------------------------------------------------ 74 # 6.Készítsen függvényt napokszama néven az alábbi algoritmus alapján. Az 75 # algoritmus a paraméterként megadott két dátumhoz (év, hónap, nap) megadja 76 # a közöttük eltelt napok számát! (A MOD a maradékos osztást, a DIV az 77 # egészrészes osztást jelöli.) Az algoritmust a fuggveny.txt fájlban is 78 # megtalálja. A függvényt a következő feladat megoldásához felhasználhatja. 79 # 80 # Függvény napokszama(e1:egész,h1:egész,n1:egész,e2:egész,h2:egész,n2:egész):egész 81 # h1 = (h1 + 9) MOD 12 82 # e1 = e1 - h1 DIV 10 83 # d1 = 365*e1 + e1 DIV 4 - e1 DIV 100 + e1 DIV 400 + (h1*306 + 5) DIV 10 + n1 - 1 84 # h2 = (h2 + 9) MOD 12 85 # e2 = e2 - h2 DIV 10 86 # d2 = 365*e2 + e2 DIV 4 - e2 DIV 100 + e2 DIV 400 + (h2*306 + 5) DIV 10 + n2 - 1 87 # napokszama:= d2-d1 88 # Függvény vége 89 #------------------------------------------------------------------------------ 90 def napokszama(e1, h1, n1, e2, h2, n2): 91 h1 = (h1 + 9) % 12 92 e1 = e1 - h1 // 10 93 d1= 365*e1 + e1 // 4 - e1 // 100 + e1 // 400 + (h1*306 + 5) // 10 + n1 - 1 94 h2 = (h2 + 9) % 12 95 e2 = e2 - h2 // 10 96 d2= 365*e2 + e2 // 4 - e2 // 100 + e2 // 400 + (h2*306 + 5) // 10 + n2 - 1 97 return d2-d1 98 99 #------------------------------------------------------------------------------- 100 # 7.A közlekedési társaság azoknak az utasoknak, akiknek még érvényes, de 101 # 3 napon belül lejár a bérlete, figyelmeztetést szeretne küldeni e-mailben. 102 # (Például, ha a felszállás időpontja 2019. február 5., és a bérlet 103 # érvényessége 2019. február 8., akkor már kap az utas levelet, ha 104 # 2019. február 9. az érvényessége, akkor még nem kap levelet.) Válogassa ki 105 # és írja a figyelmeztetes.txt állományba ezen utasok kártyaazonosítóját és 106 # a bérlet érvényességi idejét (éééé-hh-nn formátumban) szóközzel elválasztva! 107 #------------------------------------------------------------------------------- 108 print('7. feladat - adatok kiírása fájlba') 109 110 fki=open('figyelmeztetes.txt','w') 111 for sor in forgalom: 112 if len(sor[4])==8: #bérletes, nem jegyes 113 #felszállás 114 datum=sor[1][0:8] #a második adat első 8 karaktere 115 e1=int(datum[0:4]) #év 116 h1=int(datum[4:6]) #hónap 117 n1=int(datum[6:8]) #nap 118 #érvényesség 119 ervenyes=sor[4] #az ötödik adat 120 121 e2=int(ervenyes[0:4]) #év 122 h2=int(ervenyes[4:6]) #hónap 123 n2=int(ervenyes[6:8]) #nap 124 if napokszama(e1, h1, n1, e2, h2, n2) in {0,1,2,3}: 125 print(sor[2]+' '+ervenyes[0:4]+'-'+ervenyes[4:6]+'-'+ervenyes[6:8],file=fki) 126 127 fki.close() 128 129 130 131 132 133 134 135 136 137 138 139 140 141