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