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()