1 vendegek=dict() 2 def masodperc(o,p,mp): 3 return o*3600+p*60+mp 4 5 def orapercmp(idomp): 6 o=idomp//3600 7 p=(idomp%3600)//60 8 mp=(idomp%3600)%60 9 return [o,p,mp] 10 #---------------------------------------------------------------------------------------------- 11 # 1. Olvassa be a furdoadat.txt fájl tartalmát! 12 #---------------------------------------------------------------------------------------------- 13 def F1(): 14 print('1. feladat - adatok beolvasása') 15 fbe=open('furdoadat.txt','r') 16 #Első sor külön kell, mert kell a vendég azonosítója a szótárkulcshoz. 17 #A beolvasott sorból lista lesz (strip().split()). 18 #Mindent integerré alakítok (map), illetve listává. 19 elsosor=list(map(int,fbe.readline().strip().split())) 20 key=elsosor[0] #kulcs a vendégezonosító 21 temp=[] 22 temp.append(elsosor[1:]) #Kulcshoz tartozó bejegyzés a sor többi eleméből 23 #képzett lista. 24 for sor in fbe: 25 sor=list(map(int,sor.strip().split())) #minden legyen integer 26 if sor[0]==key: 27 temp.append(sor[1:]) 28 else: 29 vendegek[key]=temp 30 temp=[] 31 temp.append(sor[1:]) 32 key=sor[0] 33 vendegek[key]=temp 34 fbe.close() 35 36 #---------------------------------------------------------------------------------------------- 37 # 2. Írja a képernyőre, hogy az első és az utolsó vendég mikor lépett ki az 38 # öltözőből! 39 #---------------------------------------------------------------------------------------------- 40 def F2(): 41 print('\n2. feladat') 42 #Tudjuk, hogy időrendben vannak az adatok!! Így az első vendég és az utolsó is adott! 43 lst = list(vendegek.values()) 44 elso=lst[0][0] 45 print(f'Az első vendég {elso[2]}:{elso[3]}:{elso[4]}-kor lépett ki az öltözőből.') 46 utolso=lst[-1][0] #utolsó adatunk indexe -1 (utolsó előtti -2, és így tovább...) 47 print(f'Az utolsó vendég {utolso[2]}:{utolso[3]}:{utolso[4]}-kor lépett ki az öltözőből.') 48 49 #---------------------------------------------------------------------------------------------- 50 # 3. Határozza meg és írja ki a képernyőre, hogy hány olyan fürdővendég volt, 51 # aki az öltözőn kívül csak egy részlegen járt és azt a részleget csak 52 # egyszer használta! 53 #---------------------------------------------------------------------------------------------- 54 def F3(): 55 print('\n3. feladat') 56 #Az adatok vendégenként csoportosítva vannak a szótárnak köszönhetően. Ha csak egy 57 #részlegen járt egy vendég, és ott is csak egyszer, akkor az ő szótár bejegyzése 4 elemű 58 #lista lesz (ahol minden elem egy lista, persze)! (Öltözőból ki, valahova be, onnan ki, 59 #és öltözőbe vissza) 60 vendegszam=0 61 #Egy szótárbejegyzés így néz ki: 62 # 112: [[0, 1, 6, 14, 56], [1, 0, 6, 17, 47], [1, 1, 6, 42, 47], [0, 0, 6, 45, 44]] 63 #Így pl.: 64 #key: 112 65 #vendegek[key]=[[0, 1, 6, 14, 56], [1, 0, 6, 17, 47], [1, 1, 6, 42, 47], [0, 0, 6, 45, 44]] 66 for key in vendegek.keys(): 67 if len(vendegek[key])==4: 68 vendegszam+=1 69 print('A fürdőben %d vendég járt csak egy részlegen.' %vendegszam) 70 71 #---------------------------------------------------------------------------------------------- 72 # 4. Határozza meg, hogy melyik vendég töltötte a legtöbb időt a fürdőben! 73 # A vendég azonosítóját és a fürdőben tartózkodás idejét írja ki a képernyőre! 74 # A fürdőben a legtöbb időt töltő vendégek közül elegendő egy vendég adatait 75 # megjelenítenie. 76 #---------------------------------------------------------------------------------------------- 77 def F4(): 78 print('\n4. feladat') 79 max_ido=0 80 for key in vendegek.keys(): 81 kezd=vendegek[key][0] 82 vege=vendegek[key][-1] 83 ido=masodperc(vege[2],vege[3],vege[4])-masodperc(kezd[2],kezd[3],kezd[4]) 84 if ido>max_ido: 85 max_ido=ido 86 a_mi_emberunk=key 87 88 89 idopont=orapercmp(max_ido) 90 print('A legtöbb időt eltöltő vendég:') 91 print(f'{a_mi_emberunk}. vendég {idopont[0]}:{idopont[1]}:{idopont[2]}') 92 93 #---------------------------------------------------------------------------------------------- 94 # 5. Készítsen statisztikát, hogy 06:00:00-08:59:59 óra között, 09:00:00-15:59:59 95 # óra között és 16:00:00-19:59:59 óra között hány vendég érkezett a fürdőbe! 96 # Az eredményt írja ki a képernyőre a mintán látható formában! 97 #---------------------------------------------------------------------------------------------- 98 def F5(): 99 print('\n4. feladat') 100 #Három kategóriánk van: 101 #1.kategória: óra rész 6 és 8 között legyen, 102 #2.kategória: óra rész 9 és 15 között legyen, 103 #3.kategória: óra rész 16 és 19 között legyen, 104 kat=[0]*3 105 for adat in vendegek.values(): 106 ora=adat[0][2] 107 if ora>=6 and ora<=8: 108 kat_index=0 109 if ora>=9 and ora<=15: 110 kat_index=1 111 if ora>=16 and ora<=19: 112 kat_index=2 113 kat[kat_index]+=1 114 115 print('6-9 óra között %d vendég' %kat[0]) 116 print('9-16 óra között %d vendég' %kat[1]) 117 print('16-20 óra között %d vendég' %kat[2]) 118 119 120 #---------------------------------------------------------------------------------------------- 121 # 6. Készítsen egy listát a szauna részlegen járt vendégekről és az általuk ott 122 # töltött időről! A vendég azonosítóját és a részlegen eltöltött időt a 123 # szauna.txt fájlba írja ki! A fájlban egy sorban a vendég azonosítója és 124 # szóközzel elválasztva a részlegen eltöltött idő szerepeljen 125 # óra:perc:másodperc formában! Ügyeljen arra, hogy egy vendég a szauna 126 # részlegben a nap folyamán többször is járhatott! 127 #---------------------------------------------------------------------------------------------- 128 def F6(): 129 print('\n6. feladat - adatok kiírása fájlba') 130 fki=open('szauna.txt','w') 131 132 #szauna részleg azonosítója: 2 (a részleg a kislistákban az első adat!) 133 #Például: a furdoadat.txt-ben a 471. sortól van a 288-as vendég mozgása 134 #288 0 1 17 4 17 ---> öltözőből kilépett 135 #288 2 0 17 6 19 ---> szaunába bement 17:06:19-kor 136 #288 2 1 17 16 33 ---> szaunából kijött 17:16:33-kor 137 #288 3 0 17 17 43 138 #288 3 1 17 35 58 139 #288 2 0 17 37 17 ---> ismét szaunába ment 17:37:17-kor 140 #288 2 1 17 50 26 ---> kijött a szaunából 17:50:26-kor (ez összesen 23 perc 23 mp) 141 #288 0 0 17 51 33 142 #Ez a fenti sorozat a szótárunkban, mint BEJEGYZÉS, így fest: 143 #288: [[0, 1, 17, 4, 17],[2, 0, 17, 6, 19],[2, 1, 17, 16, 33],...] 144 for bejegyzes in vendegek.items(): 145 vendeg=bejegyzes[0] #vendeg=288 146 vendegmozgas=bejegyzes[1] #vendegmozgas=[[0, 1, 17, 4, 17],[2, 0, 17, 6, 19],[2, 1, 17, 16, 33],...] 147 szauna_ido=0 148 for elem in vendegmozgas: #Itt egy elem így néz ki például: [2, 0, 17, 6, 19]. 149 if elem[0]==2: 150 if elem[1]==0: 151 be=masodperc(elem[2],elem[3],elem[4]) 152 if elem[1]==1: 153 ki=masodperc(elem[2],elem[3],elem[4]) 154 szauna_ido+=ki-be 155 if szauna_ido>0: 156 ido=orapercmp(szauna_ido) 157 print(str(vendeg)+' '+str(ido[0]).zfill(2).rjust(2)+':'+str(ido[1]).zfill(2).rjust(2)+ 158 ':'+str(ido[2]).zfill(2).rjust(2),file=fki) 159 160 fki.close() 161 162 #---------------------------------------------------------------------------------------------- 163 # 7. Készítsen egy listát, amelyben megadja, hogy az egyes részlegeket hányan 164 # használták! Az eredményt a minta szerint írja ki a képernyőre! Ha egy 165 # vendég egy részlegen többször is járt a nap folyamán, azt a statisztikában 166 # csak egynek számolja! 167 #---------------------------------------------------------------------------------------------- 168 def F7(): 169 print('\n7. feladat') 170 reszleg=['Uszoda','Szaunák','Gyógyvizes medencék','Strand'] #177.sor miatt 171 fo=[0]*4 #Számlálók listája az egyes részlegekhez. 172 voltmar={0} #176.sor miatt az öltözőt már itt beleírom a halmazba (öltöző kódja:0) 173 #Kihasználom, hogy a részlegkódok (1,2,3,4 értékek) indexeknek (0,1,2,3) is jók! 174 for bejegyzes in vendegek.values(): 175 for mozgas in bejegyzes: 176 if mozgas[0] not in voltmar: #Ha még nincs a halmazban az adott részlegkód, akkor 177 fo[mozgas[0]-1]+=1 #a részlegkódnak megfelelő indexen (-1) növelem a számlálót! 178 voltmar.add(mozgas[0]) #A már megszámlált részleg kódját a halmazba teszem! 179 voltmar={0} #Amikor végzek egy bejegyzéssel, azaz egy vendéggel, a halmazt inicializálom! 180 for i in range(4): 181 print('%s: %d' %(reszleg[i],fo[i])) #Ez csak azért, hogy ne legyen 4 print parancsom... :) 182 183 # VAGY - halmazok bevetésével oldhatjuk meg 184 # a reszleg lista a részleg neve mellett egy halmazt is tartalmaz, 185 # melybe "beledobáljuk" az adott részlegen járó vendég azonosítóját, 186 # kihasználva azt, hogy a halmaz nem tartalmaz ismétlődő elemeket... 187 print('------------------- halmazos megoldás -------------------') 188 reszleg=[('Öltöző',set()),('Uszoda',set()),('Szaunák',set()),('Gyógyvizes medencék',set()),('Strand',set())] 189 for bejegyzes in vendegek.items(): 190 for mozgas in bejegyzes[1]: 191 reszleg[mozgas[0]][1].add(bejegyzes[0]) 192 for i in range(1,len(reszleg)): 193 print('%s: %d' %(reszleg[i][0],len(reszleg[i][1]))) 194 #-------------------------------F Ő M O D U L-------------------------------------------------- 195 196 F1() 197 F2() 198 F3() 199 F4() 200 F5() 201 F6() 202 F7() 203