1 # -------------------------------------------------------------------------------- 2 # 1. Olvassa be a szallit.txt állomány adatait, és annak felhasználásával oldja 3 # meg a következő feladatokat! 4 # -------------------------------------------------------------------------------- 5 def F1(): 6 fbe=open('szallit.txt','r') 7 elsosor=fbe.readline().strip().split() 8 elsosor=list(map(int,elsosor)) 9 global hossz,ido # szalag hossza és egységnyi távolság megtételéhez 10 # szükséges idő 11 hossz=elsosor[0] 12 ido=elsosor[1] 13 for sor in fbe: 14 rekeszek.append(list(map(int,sor.strip().split()))) 15 fbe.close() 16 print(rekeszek) 17 # -------------------------------------------------------------------------------- 18 # 2. Kérje be egy szállítás sorszámát, majd írassa ki annak indulási és cél- 19 # helyét! (A szállításokat 1-től sorszámozzuk.) 20 # -------------------------------------------------------------------------------- 21 def F2(): 22 print('2. feladat') 23 sorszam=int(input('Adja meg, melyik adatsorra kíváncsi! ')) 24 index=sorszam-1 25 rekesz=rekeszek[index] 26 # röviden: 27 # rekesz=rekeszek[int(input('Adja meg, melyik adatsorra kíváncsi! '))-1] 28 29 print(f'Honnan: {rekesz[1]} Hova: {rekesz[2]}') 30 # -------------------------------------------------------------------------------- 31 # 3. Készítsen függvényt tav néven, amely megadja a szállítás távolságát a 32 # szalag hosszának, valamint az indulási és a célhelynek ismeretében! 33 # A függvényt használja fel a későbbi feladatok megoldása során. A függvény- 34 # fejet az alábbiaknak megfelelően készítse el, megoldásában az ott szereplő 35 # változóneveket használja! 36 # Függvény tav(szalaghossz, indulashelye, erkezeshelye : egész szám):egész szám 37 # -------------------------------------------------------------------------------- 38 def tav(szalaghossz,indulashelye,erkezeshelye): 39 if indulashelye<erkezeshelye: 40 return erkezeshelye-indulashelye 41 else: 42 return szalaghossz-indulashelye+erkezeshelye 43 # -------------------------------------------------------------------------------- 44 # 4. Határozza meg, hogy a rendelkezésre álló szállítások során mekkora volt a 45 # legnagyobb szállítási távolság! Írja a képernyőre a maximális távolságot és 46 # az összes ilyen hosszúságú szállítás sorszámát! 47 # -------------------------------------------------------------------------------- 48 def F4(): 49 print('4. feladat') 50 # "klasszikus" megoldás ************************************************ 51 maxtav=0 52 for rekesz in rekeszek: 53 tavolsag=tav(hossz,rekesz[1],rekesz[2]) 54 if tavolsag>maxtav: 55 maxtav=tavolsag 56 print(f'A legnagyobb távolság: {maxtav}') 57 # sorszámok: 58 print('A maximális távolságú szállítások sorszáma:',end=' ') 59 for sorszam,rekesz in enumerate(rekeszek,start=1): 60 if tav(hossz,rekesz[1],rekesz[2])==maxtav: 61 print(sorszam,end=' ') 62 print() # soremelés 63 64 # "pythonos" megoldás ************************************************** 65 tavok=[tav(hossz,rekesz[1],rekesz[2]) for rekesz in rekeszek] 66 print(f'A legnagyobb távolság: {max(tavok)}') 67 print('A maximális távolságú szállítások sorszáma:',end=' ') 68 [print(sorszam,end=' ') for sorszam in [sorszam for sorszam,rekesz in \ 69 enumerate(rekeszek,start=1) if tav(hossz,rekesz[1],rekesz[2])==maxtav]] 70 print() 71 # Megjegyzés: a 67. sor végi \ technikai soremelés, nem "igazi", csak azért 72 # van, hogy egyben legyen látható a parancs, ne kelljen jobbra görgetni ... 73 # -------------------------------------------------------------------------------- 74 # 5. Adja meg, mekkora tömeg haladt el összesen a 0 pozíciójú hely előtt! Az onnan 75 # induló vagy oda érkező rekeszeket ne vegye figyelembe! 76 # -------------------------------------------------------------------------------- 77 def F5(): 78 print('5. feladat') 79 # "klasszikus" megoldás ************************************************ 80 ossztomeg=0 81 for rekesz in rekeszek: 82 feltetel_1=rekesz[1]>rekesz[2] 83 feltetel_2=(0 not in [rekesz[1],rekesz[2]] and 200 not in [rekesz[1],rekesz[2]]) 84 if feltetel_1 and feltetel_2: 85 ossztomeg+=rekesz[3] 86 print(f'A kezdőpont előtt elhaladó rekeszek össztömege: {ossztomeg}') 87 88 # "pythonos" megoldás ************************************************** 89 ossztomeg=sum([rekesz[3] for rekesz in rekeszek if rekesz[1]>rekesz[2] and \ 90 0 not in [rekesz[1],rekesz[2]] and 200 not in [rekesz[1],rekesz[2]]]) 91 print(f'A kezdőpont előtt elhaladó rekeszek össztömege: {ossztomeg}') 92 # -------------------------------------------------------------------------------- 93 # 6. Kérjen be egy időpontot, és határozza meg az adott időpontban szállított 94 # rekeszek sorszámát! Az éppen akkor induló rekeszeket vegye figyelembe, de a 95 # célba érőket ne! Ha nem volt szállított rekesz, akkor a rekeszek sorszáma 96 # helyett az „üres” szót írja ki! 97 # -------------------------------------------------------------------------------- 98 def F6(): 99 print('6. feladat') 100 idopont=int(input('Adja meg a kívánt időpontot! ')) 101 print('A szállított rekeszek halmaza:',end=' ') 102 van=False 103 for sorszam,rekesz in enumerate(rekeszek,start=1): 104 indul=rekesz[0] 105 erkezik=indul+tav(hossz,rekesz[1],rekesz[2])*ido # lsd. 9. sor 106 if indul<=idopont<erkezik: 107 print(sorszam,end=' ') 108 if van==False: 109 van=True 110 if not van: 111 print('üres',end=' ') 112 print() 113 # -------------------------------------------------------------------------------- 114 # 7. Hozza létre a tomeg.txt fájlt, amely megadja, hogy az egyes helyekről 115 # összességében mennyi tömeget szállítottak el! Azok a helyek ne jelenjenek meg 116 # a fájlban, ahonnan nem történt szállítás! 117 # (A fájlba írt adatok sorrendje tetszőleges.) 118 # -------------------------------------------------------------------------------- 119 def F7(): 120 fki=open('tomeg.txt','w') 121 helyek=dict() 122 for hely in range(1,201): # szótár: minden lehetséges hely kulcs 123 helyek[hely]=0 124 for rekesz in rekeszek: 125 helyek[rekesz[1]]+=rekesz[3] 126 [print(hely,tomeg,file=fki) for hely,tomeg in helyek.items() if helyek[hely]>0] 127 fki.close() 128 129 # ------------------------------------------------------------------------ FŐMODUL 130 rekeszek=[] 131 F1() 132 F2() 133 F4() 134 F5() 135 F6() 136 F7() 137