telefonos201610.py
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()