eutazas201910.py
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