helyjegy201005.py
1    def kiir(ssz, szoveg)
2        print('{}. feladat - {}'.format(ssz, szoveg))
3    
4    
5    # -----------------------------------------------------------------------------
6    # 1. Olvassa be az eladott.txt állományban talált adatokat, s azok
7    #    felhasználásával oldja meg a következő feladatokat! Ha az állományt nem
8    #    tudja beolvasni, az állomány első 10 sorának adatait jegyezze be a
9    #    programba és dolgozzon azzal!
10   # -----------------------------------------------------------------------------
11   kiir(1, 'Adatok beolvasása')
12   
13   fbe = open('eladott.txt', 'r')
14   elsosor = fbe.readline()
15   elsosor = elsosor.strip().split()
16   
17   ej = int(elsosor[0])
18   tav = int(elsosor[1])
19   ar = int(elsosor[2])
20   
21   adatok = []
22   for sor in fbe:
23       sor = sor.strip().split()
24       u = int(sor[0])
25       tol = int(sor[1])
26       ig = int(sor[2])
27       adatok.append([u, tol, ig])
28   print(adatok)
29   fbe.close()
30   
31   # -----------------------------------------------------------------------------
32   # 2. Adja meg a legutolsó jegyvásárló ülésének sorszámát és az általa
33   #    beutazott távolságot! A kívánt adatokat a képernyőn jelenítse meg!
34   # -----------------------------------------------------------------------------
35   kiir(2, 'Legutolsó jegyvásárló adatai')
36   
37   index = ej - 1
38   print('Utolsó jegyvásárló adatai:')
39   print('Ülés: ', adatok[index][0])
40   print('Távolság: {} km'.format(adatok[index][2] - adatok[index][1]))
41   
42   # -----------------------------------------------------------------------------
43   # 3. Listázza ki, kik utazták végig a teljes utat! Az utasok sorszámát
44   #    egy-egy szóközzel elválasztva írja a képernyőre!
45   # -----------------------------------------------------------------------------
46   kiir(3, 'Kik utazták végig a teljes utat?')
47   
48   print('Végig utazók sorszáma:')
49   for i in range(len(adatok)):
50       if adatok[i][2] - adatok[i][1] == tav:
51           print(i + 1, end=' ')
52   print()
53   
54   # -----------------------------------------------------------------------------
55   # 4. Határozza meg, hogy a jegyekből mennyi bevétele származott a társaságnak!
56   #    Az eredményt írja a képernyőre!
57   # -----------------------------------------------------------------------------
58   kiir(3, 'Bevétel számítása')
59   
60   
61   def kerekit(osszeg):
62       kerek = 0;
63       maradek = osszeg % 5;
64       # öttel osztva egy számot a maradék: 0,1,2,3 vagy 4
65       # ha 0,1,2 a maradék, akkor az eredeti szám vége: 0,1,2 vagy 5,6,7 lehetett,
66       # így lefelé kerekítünk. Pl.: 127 --> maradék: 2 --> eredmény: 125
67       # ha 3,4 a maradék, akkor az eredeti szám vége: 3,4 vagy 8,9 lehetett,
68       # így felfelé kerekítünk. Pl.: 129 --> maradék: 4 --> eredmény: 129-4+5=130
69       if maradek < 3:
70           kerek = osszeg - maradek;
71       else:
72           kerek = osszeg - maradek + 5;
73   
74       return kerek;
75   
76   
77   bevetel = 0
78   for adat in adatok:
79       tav = adat[2] - adat[1]
80       if tav % 10 == 0:
81           fizetendo = (tav // 10) * ar
82       else:
83           fizetendo = ((tav // 10) + 1) * ar
84       bevetel += kerekit(fizetendo)
85   
86   print('A társaság bevétele: ', bevetel, 'Ft')
87   
88   # -----------------------------------------------------------------------------
89   # 5. Írja a képernyőre, hogy a busz végállomást megelőző utolsó
90   #    megállásánál hányan szálltak fel és le!
91   # -----------------------------------------------------------------------------
92   kiir(5, 'Végállomás előtti fel- és leszállók')
93   
94   
95   # feltételezzük, hogy az utolsóelőtti megálló a fel- és leszállásnál is ugyanaz,
96   # így csak a legnagyobb felszállási km-t nézem meg
97   def masodikszerint(adat):
98       return adat[1]
99   
100  
101  adatok2 = adatok
102  adatok2 = sorted(adatok2, key=masodikszerint, reverse=True)
103  
104  hely = adatok2[0][1]
105  le, fel = 0, 0
106  for adat in adatok:
107      if adat[1] == hely:
108          le += 1
109      if adat[2] == hely:
110          fel += 1
111  print('Utolsóelőtti helyen ({}) leszállók száma: {}'.format(hely, le))
112  print('Utolsóelőtti helyen ({}) felszállók száma: {}'.format(hely, fel))
113  
114  # -----------------------------------------------------------------------------
115  # 6. Adja meg, hogy hány helyen állt meg a busz a kiinduló állomás és a
116  #    célállomás között! Az eredményt írja a képernyőre!
117  # -----------------------------------------------------------------------------
118  kiir(6, 'Hány helyen állt meg a busz')
119  
120  # lehet úgy gondolkodni, hogy a 0-tól eltérő és a végállomástól eltérő fel- és
121  # leszállások km adatait egy halmazba "dobáljuk", ezzel az ismétlődéseket
122  # kivédjük és a halmaz elemszáma lesz a megoldás! De biztosan lehet máshogyan is.
123  
124  halmaz = set()
125  halmaz2 = set()
126  
127  for adat in adatok:
128      if adat[1] != 0 and adat[1] != tav:
129          halmaz.add(adat[1])
130      if adat[2] != 0 and adat[2] != tav:
131          halmaz.add(adat[2])
132  
133  print('Megállók száma: ', len(halmaz))
134  
135  # -----------------------------------------------------------------------------
136  # 7. Készítsen „utaslistát” az út egy pontjáról! A listában ülésenként
137  #    tüntesse fel, hogy azt az adott pillanatban melyik utas foglalja el! A
138  #    pontot, azaz a kiindulási állomástól mért távolságot, a felhasználótól
139  #    kérje be! Ha a beolvasott helyen éppen megálló lett volna, akkor a
140  #    felszálló utasokat vegye figyelembe, a leszállókat pedig hagyja
141  #    figyelmen kívül! Az eredményt az ülések sorszámának sorrendjében írja a
142  #    kihol.txt állományba! Az üres helyek esetén az „üres” szót jelenítse
143  #    meg! Minden ülés külön sorba kerüljön!
144  # -----------------------------------------------------------------------------
145  kiir(7, 'Statisztika')
146  
147  fki = open('kihol.txt', 'w')
148  
149  ulesek = [' '] * 48
150  x = int(input('Adja meg, hogy hányadik km-nél kéri az utasok listáját: '))
151  for i in range(len(adatok)):
152      if x >= adatok[i][1] and x < adatok[i][2]:
153          ulesek[adatok[i][0] - 1] = i + 1  # ulesek indexelése az ülésszámmal-1
154  
155  for ules in ulesek:
156      if ules == ' ':
157          print('üres', file=fki)
158      else:
159          print(ules, file=fki)
160  
161  fki.close()