1 # ------------------------------------------------------------------------- 2 # 1. Készítse el az mpbe függvényt, amely az óra, perc, másodperc 3 # alakban megadott időpont másodpercben kifejezett értékét adja! 4 # A függvényt a megoldásba be kell építenie! 5 # Függvény mpbe(o, p, mp:egész szám):egész szám 6 # ------------------------------------------------------------------------- 7 def mpbe(o, p, mp): 8 m = o * 3600 + p * 60 + mp 9 return m 10 11 12 # visszaváltjuk a mp-ben meglévő időt óra.perc.mp formába egy lista segítségével 13 def vissza(mp): 14 ora = mp // 3600 15 mp = mp % 3600 16 perc = mp // 60 17 mp = mp % 60 18 ido = [ora, perc, mp] 19 return ido 20 21 22 # ------------------------------------------------------------------------- 23 # 2. Olvassa be a hivas.txt állományban talált adatokat, s annak 24 # felhasználásával oldja meg a következő feladatokat! 25 # ------------------------------------------------------------------------- 26 print('2. feladat - adatok beolvasása') 27 fv = open('hivas.txt') 28 adatok = [] 29 for sor in fv: 30 sor = sor.strip().split() # Pl.: sor=['7','57','36','7','59','59'] 31 sor2 = [] 32 # a stringként beolvasott adatok számokká alakítása 33 for elem in sor: 34 sor2.append(int(elem)) # Pl.: sor2=[7,57,36,7,59,59] 35 k = mpbe(sor2[0], sor2[1], sor2[2]) # Pl. k=7*3600+57*60+36 = 28656 36 v = mpbe(sor2[3], sor2[4], sor2[5]) # Pl. v=7*3600+59*60+59 = 28799 37 ido_adatok = [] 38 ido_adatok.append(k) 39 ido_adatok.append(v) # Pl. ido_adatok=[28656,28799] 40 adatok.append(ido_adatok) # Pl. adatok=[[28656,28799],...] 41 # lista a listában: MÁTRIX 42 fv.close() 43 44 # ------------------------------------------------------------------------- 45 # 3. Készítsen statisztikát, amely megadja, hogy óránként hány hívás 46 # futott be! A képernyőn soronként egy óra-darabszám párost jelenítsen 47 # meg! Csak azok az órák jelenjenek meg, amelyben volt hívás! 48 # ------------------------------------------------------------------------- 49 print('3.feladat - óránkénti hívások száma') 50 51 ora = [0] * 24 # 24 elemű lista, melyet pontosan az órák indexelnek majd 52 for elem in adatok: 53 index = elem[0] // 3600 # első elem (0 index) mp-ben a hívás ideje 54 ora[index] += 1 # //3600: egész osztás (div) --> óra az eredmény 55 # ami pont indexeli az ora listát 56 # számláljuk, hogy ez az óra előfordult (+1) 57 for óra in range(0, 24): 58 if ora[óra] != 0: 59 print('{} óra {} hívás'.format(óra, ora[óra])) 60 61 # ------------------------------------------------------------------------- 62 # 4. Írja a képernyőre a leghosszabb hívásnak a sorszámát és másodpercben 63 # kifejezett hosszát – attól függetlenül, hogy a hívó tudott-e beszélni 64 # az ügyfélszolgálatossal vagy sem! Azonos híváshossz esetén elegendő 65 # egyet megjelenítenie. 66 # ------------------------------------------------------------------------- 67 print('4. feladat') 68 69 hívás_hosszak = [] 70 for elem in adatok: 71 hívás_hosszak.append(elem[1] - elem[0]) # vége-kezdés mp-ben 72 73 leghosszabb = max(hívás_hosszak) 74 sorszam = hívás_hosszak.index(leghosszabb) + 1 # leghosszabb sorszáma 75 print('A leghosszabb ideig vonalban levo hivo %d. sorban szerepel, a hivas hossza: %d masodperc.' % ( 76 sorszam, leghosszabb)) 77 78 # ------------------------------------------------------------------------- 79 # 5. Olvasson be egy munkaidőn belüli időpontot, majd jelenítse meg a 80 # képernyőn, hogy hányadik hívóval beszélt akkor az alkalmazott, és éppen 81 # hányan vártak arra, hogy sorra kerüljenek! Ha nem volt hívó, akkor a 82 # „Nem volt beszélő.” üzenetet jelenítse meg! 83 # ------------------------------------------------------------------------- 84 print('5. feladat') 85 86 print('Kérek egy időpontot: ') 87 ora = int(input('Óra: ')) 88 perc = int(input('Perc: ')) 89 mp = int(input('Másodperc: ')) 90 91 keres = mpbe(ora, perc, mp) # keresett időpont mp-be váltása 92 93 varakozok = 0 # várakozók száma 94 beszelo = 0 # beszélő sorszáma 95 96 for elem in adatok: 97 if keres >= elem[0] and keres <= elem[1]: 98 if beszelo == 0: 99 beszelo = adatok.index(elem) + 1 # éppen beszélő sorszáma 100 varakozok += 1 # mindenki várakozónak számít, aki a keresettel 101 # azonos időpontban bent van a rendszerben 102 # a beszélőt is beleértve, ezért majd -1 103 104 if beszelo != 0: # van találat 105 print('A várakozók száma: {}, a beszélő a(z) {}. hivo.'.format(varakozok - 1, beszelo)) 106 else: 107 print('Nem volt beszélő.') 108 109 # ------------------------------------------------------------------------- 110 # 6. Írja a képernyőre, annak a hívónak az azonosítóját, akivel a 111 # munkatárs utoljára beszélt! Írja ki a várakozás másodpercekben mért 112 # hosszát is! (Ha nem kellett várnia, a várakozási idő 0.) 113 # ------------------------------------------------------------------------- 114 print('6. feladat') 115 116 utolso = 0 # az utolsó hívó indexe lesz ebben 117 ora12 = mpbe(12, 0, 0) # ügyfélfogadás vége 12 óra 118 119 # Sorban megyünk az adatokon előre: 120 for i in range(len(adatok)): 121 # ha az aktuális hívó<12 és később fejezte be, mint az utolsónak feltételezett 122 if adatok[i][0] < ora12 and adatok[i][1] > adatok[utolso][1]: 123 # akkor ő az utolsó, és aki utolsónak feltételezett volt, 124 # az lesz az előző 125 elozo = utolso 126 utolso = i 127 128 varakozas = adatok[elozo][1] - adatok[utolso][0] 129 print('Az utolsó telefonáló adatai a(z) {}. sorban vannak, {} masodpercig várt.'.format(utolso + 1, varakozas)) 130 131 # ------------------------------------------------------------------------- 132 # 7. Készítse el a sikeres.txt állományt, amely az ügyfélszolgálathoz 133 # bekapcsolt hívások listáját tartalmazza! A fájl egyes soraiban a hívó 134 # sorszáma, a beszélgetés kezdete (amikor az ügyfélszolgálatos fogadta a 135 # hívást) és vége szerepeljen az alábbi mintának megfelelő formában! 136 # Például a feladat elején olvasható példa bemenet esetén a fájl tartalma: 137 # 2 8 0 0 8 1 39 138 # 4 8 1 39 8 4 17 139 # … 140 # ------------------------------------------------------------------------- 141 print('7. feladat - sikeres.txt fájl írása') 142 143 144 def kiírás(index, előző): 145 if adatok[előző][1] < ora8: 146 kezdőidőpont_beszélő = vissza(ora8) 147 else: 148 kezdőidőpont_beszélő = vissza(adatok[előző][1]) 149 150 végeidőpont_beszélő = vissza(adatok[index][1]) 151 fájl_sor = '' 152 fájl_sor = str(index + 1) + ' ' 153 for elem in kezdőidőpont_beszélő: 154 fájl_sor += (str(elem) + ' ') 155 for elem in végeidőpont_beszélő: 156 fájl_sor += (str(elem) + ' ') 157 fájl_sor += '\n' 158 return fájl_sor 159 160 161 fv = open('sikeres.txt', 'w') 162 163 ora8 = mpbe(8, 0, 0) # beszélgetés kezdése 8 óra 164 165 elozo = 0 166 beszelok = [] # ebbe gyűjtjük azok indexét, akikkel beszélt a központos 167 168 # Sorban megyünk az adatokon előre, a 0 indexű (előző) utánival kezdve: 169 for i in range(1, len(adatok)): 170 # ha 12 előtti a hívás, de 8 utáni és a vége későbbi, mint az előzőé, akkor... 171 if adatok[i][0] < ora12 and adatok[i][1] > ora8 and adatok[i][1] > adatok[elozo][1]: 172 # ...ő beszélt a központossal 173 fv.write(kiírás(i, elozo)) 174 175 beszelok.append(i) # így eltároljuk 176 elozo = i # és ő lesz az előző, akihez majd a következőt hasonlítjuk 177 178 fv.close()