1 # kongresszus - dig.kult. mintafeladat 2 def F1(): 3 print('1. feladat - fájl beolvasása') 4 fbe=open('eloadasok.txt','r',encoding='utf-8') 5 for sor in fbe: 6 sor=sor.strip().split('\t') # tabulátorokkal tagolt a forrás 7 sor[2:5]=map(int,sor[2:5]) # a számokat érdemes számként tárolni 8 adatok.append(sor) 9 fbe.close() 10 return sorted(adatok,key=lambda ea:(ea[2],ea[3])) # rendezés: nap és előadás sorszáma szerint növekvően 11 12 def osszerak(): 13 # osszerak: Összerakjuk az adatok alapján naponta, időrendben az eseményeket: 14 # kezdőidő, befejezés ideje, előadó, cím, eszköz vagy 15 # kezdőidő, befejezés ideje, vita vagy ebédszünet... 16 # mindezt a további feladatok előkészítéseként... 17 ido=8*60 # idő percben, és 8 órakor kezdődnek az előadások 18 index=-1 # indexnek egy olyan értéket adjunk, amit biztosan le kell majd "cserélni"... 19 for ea in rendezett: # vegyük sorban az előadásokat a rendezett mátrixból 20 if ea[2]-5!=index: # ea[2] az előadás napja (5-8 között vannak a napok) 21 index=ea[2]-5 # index az előadás napja alapján (-5, mert 5-8 között vannak a napok) 22 ido=8*60 # idő percben, és 8 órakor kezdődnek az előadások 23 ebed=True # feltételezzük, hogy lesz ebédszünet... 24 # napok mátrix: minden napra (5-8) összeszedjük a programokat: 25 # kezdés idő; vége (kezdés + ea. hossza); előadó neve; ea. címe; eszközigény 26 napok[index].append(str(ido)+';'+str(ido+ea[4])+';'+ea[0]+';'+ea[5]+';'+'('+ea[6]+')') 27 ido+=ea[4] # ido növelés az ea. hosszával 28 nap_ido[index]+=ea[4] # nap_ido mátrix: adott napi összidő! ea[4] az előadás hossza 29 napok[index].append(str(ido)+';'+str(ido+20)+';'+'Vita') # napok mátrix: adott napi új bejegyzés a +20 perc vita kezdés és vége, és a 'Vita" szöveg 30 ido+=20 # ido növelése a vita idejével (20 perc) 31 if ido>12*60 and ebed: # lesz-e ebédszünet 32 napok[index].append(str(ido)+';'+str(ido+60)+';'+'Ebédszünet') # ha lesz, akkor új esemény bejegyzése aktuális napra 33 ido+=60 # ido növelése ebédidővel (+60 perc) 34 ebed=False # ebed legyen false, hogy még egyszer ne számoljuk már vele... 35 # print(napok) 36 37 def F2(): 38 print('---------------------------------------------------------------------') 39 print('2. feladat - napi előadások') 40 s=5 # kezdőnap 5. 41 for nap in napok: # osszerakban előállított napok máttrix feldolgozása 42 print(f'november {s}.') 43 ssz=1 # előadás sorszáma adott napon belül 44 for ea in nap: # előadások az adott napon 45 ea=ea.split(';') # ea lista előállítása a szöveg alapján, elválasztó a ; karakter 46 if ea[2] not in ('Vita', 'Ebédszünet'): # 2-es indexen az előadó neve van vagy a 'Vita', 'Ebédszünet' szöveg 47 print(f'\t{ssz}. {ea[2]}: {ea[3]}') 48 ssz+=1 # sorszám növelése 49 s+=1 50 51 def F3(): 52 print('---------------------------------------------------------------------') 53 print('3. feladat - előadások összideje (vita nélkül) naponta') 54 for i in range(len(nap_ido)): # nap_ido (osszerak) listában minden megvan már... 55 print(f'{i+1}. nap: {nap_ido[i]//60}:{str(nap_ido[i]%60).zfill(2).rjust(2)}') # óra:perc alakban írjuk ki... 56 57 def F4(): 58 print('---------------------------------------------------------------------') 59 print('4. feladat - ki tartja a leghosszabb előadást + előadás hossza') 60 r=sorted(adatok,key=lambda ea:(ea[2],-ea[4])) # eredeti adatok mátrix rendezése: nap szerint növekvő, azon belül ea hossza csökkenőben 61 i=0 62 while r[i][2]!=6: # ismétlődés amíg 6. nem lesz 63 i+=1 64 maxi=r[i][4] # a rendezés miatt 6. első adata a maximumot tartalmazó érték 65 while r[i][4]==maxi: # 6-ikai napon addig megyünk, amíg maximális ea hosszokat találunk 66 print(f'{r[i][0]} {r[i][4]}') 67 i+=1 68 69 def F5(): 70 print('---------------------------------------------------------------------') 71 print('5. feladat - előadások vége naponta (vitával együtt)') 72 for i in range(4): 73 last=napok[i][-1].split(';') # napokban az utolsó (last) adatban benne van a vége percekben 74 print(f'{i+1}. nap: {int(last[1])//60}:{str(int(last[1])%60).zfill(2).rjust(2)}') 75 76 def F6(): 77 print('6. feladat - ebédszünet a 3. napon') 78 harmadik=napok[2] # napok[2] a harmadik nap adatait tartalmazza 79 i=0 80 while harmadik[i].split(';')[2]!='Ebédszünet': # addig megyünk amíg nem botlunk bele az ebédszünet szövegbe 81 i+=1 82 kezd=int(harmadik[i].split(';')[0]) # biztos, hogy van ebédszünet a harmadik napon, ezt nyugodtan feltételzhetjük 5. feladat alapján 83 print(f'A 3. napon az ebédszünet {kezd//60}:{str(kezd%60).zfill(2).rjust(2)}-kor kezdődik!') 84 85 def F7(): 86 print('---------------------------------------------------------------------') 87 print('7. feladat - azonos nevű előadók és előadásaik száma') 88 # ez egy rossz feldatmegfogalmazás, de mindegy (nem azonos nevű előadóink vannak, hanem ugyanaz a személy több előadást is tart(hat)) 89 nevek=set() # az előadók nevét egy halmzba "dobáljuk", ezzel lesz egy gyűjteményünk az egyedi nevekről 90 nevek_lst=[] # kell egy lista is a count használata miatt, csakis azért... 91 for ea in adatok: # eredeti adatokon megyünk végig 92 nevek.add(ea[0]) # nevet a nevek halmazba és 93 nevek_lst.append(ea[0]) # a nevek_lst listába is elhelyezzük 94 for nev in nevek: # halamzon megyünk végig, mert ott minden név csak egyszer van... 95 db=nevek_lst.count(nev) # és a név alapján a listában "countolunk"... 96 if db>1: 97 print(f'{nev} {db}') 98 99 def F8(): 100 print('---------------------------------------------------------------------') 101 print('8. feladat - megadott napon és időpontban milyen esemény zajlik') 102 n=int(input('Kérek egy napot (5-8): ')) 103 o=int(input('Kérek egy órát: ')) 104 p=int(input('Kérek egy percet: ')) 105 vido=o*60+p # vido: vizsgált időpont 106 nap=napok[n-5] 107 rendben=False # rendben: az időpont már fel lett dolgozva 108 if vido<480: # reggel 8 órakor kezdődnek az előadások (8*60) 109 print('Még nem kezdődött el') 110 rendben=True 111 for esemeny in nap: 112 esemeny=esemeny.split(';') 113 k=int(esemeny[0]) 114 v=int(esemeny[1]) 115 if k<=vido<v: 116 rendben=True 117 if esemeny[2] not in ('Vita', 'Ebédszünet'): 118 print('Előadás') 119 else: 120 print(esemeny[2]) 121 if not rendben: 122 print('Már véget ért') 123 124 def F9(): 125 print('---------------------------------------------------------------------') 126 print('9. feladat - fájl kiírása - időrend naponta') 127 fki=open('idorend.txt','w') 128 129 for n in range(4): 130 print(f'november {n+5}.',file=fki) 131 for ea in napok[n]: 132 ea=ea.split(';') 133 if len(ea)>3: 134 print(f'{int(ea[0])//60}:{str(int(ea[0])%60).zfill(2).rjust(2)}-{int(ea[1])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)} {ea[2]}: {ea[3]} {ea[4]}',file=fki) 135 else: 136 print(f'{int(ea[0])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)}-{int(ea[1])//60}:{str(int(ea[1])%60).zfill(2).rjust(2)} {ea[2]}',file=fki) 137 138 fki.close() 139 # ----------------------------------- F Ő M O D U L ----------------------------------- 140 adatok=[] 141 rendezett=F1() 142 napok=[[],[],[],[]] 143 nap_ido=[0,0,0,0] 144 # print(rendezett) 145 osszerak() 146 F2() 147 F3() 148 F4() 149 F5() 150 F6() 151 F7() 152 F8() 153 F9() 154