zfoxatis

2008-as emelt szintű érettségi 4.sz feladata Python 3-ban

Jan 24th, 2012
93
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/python3
  2. #-*-coding:utf-8-*-
  3.  
  4. feladat={'leírás':'''2008-as emelt szintű számtech érettségi \n\n4.sz programozás feladata\n
  5. Esemes Ernő szenvedélyes SMS-küldő, ezért a MaMobil nevű cég tesztelésre kérte fel.
  6. Ehhez egy új, kézreálló telefont adnak, amelynek tesztüzemben egyetlen hátránya,
  7. hogy legfeljebb az először érkező 10 darab, egyenként legfeljebb 100 karakteres
  8. üzenetet tud eltárolni. Ha ettől több üzenet van, akkor azokat korlátlan számban
  9. a szolgáltató őrzi meg a hangpostához hasonlóan, tehát azokhoz csak bizonyos díj
  10. fejében juthat hozzá. Az üzenetek nem tartalmazhatnak ékezetes karaktereket.
  11. Az sms.txt állomány első sorában az a k szám olvasható, amely megadja, hogy hány
  12. üzenet érkezett a készülékre a mai napon. Az érkező üzenetek száma legalább egy,
  13. de nem haladja meg a 100 darabot. Minden üzenethez 2 sor tartozik. Az első sor
  14. szerkezete a következő: először az érkezés órája (szám), érkezés perce (szám),
  15. telefonszám (pontosan 9 jegyű szám), a másodikban pedig az üzenet (legfeljebb
  16. 100 karakternyi szöveg) található. Az állományban az üzenetek számát követően
  17. k×2 sor szerepel. Az üzenetek érkezési idő szerint növekvően rendezettek.
  18. - Készítsen programot sms néven, amely az alábbi kérdésekre válaszol!
  19. - Ügyeljen arra, hogy a program forráskódját a megadott helyre mentse!
  20. - A képernyőre írást igénylő részfeladatok eredményének megjelenítése
  21. előtt írja a képernyőre a feladat sorszámát! (Például 3. feladat: )\n''',
  22. 'f1':'''\n1. feladat:
  23. - Olvassa be az sms.txt állományban talált adatokat, s annak felhasználásával
  24. oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni, akkor
  25. a benne található adatok közül az első tíz üzenet adatait jegyezze be a programba,
  26. s úgy oldja meg a feladatokat!\n''',
  27. 'f2':'''\n\n2. feladat
  28. - A fájlban tárolt utolsó üzenet érkezésekor melyik üzenet a legfrissebb a telefon
  29. memóriájában? Írja az üzenet szövegét a képernyőre!\n''',
  30. 'f3':'''\n\n3. feladat
  31. - Adja meg a leghosszabb és a legrövidebb üzenetek adatait! Ha több azonos hosszúságú
  32. üzenet van, akkor elegendő csak egyet-egyet megadnia!
  33. A képernyőn óra, perc, telefonszám, üzenet formában jelenítse meg az adatokat!\n''',
  34. 'f4':'''\n\n4. feladat
  35. - Készítsen karakterhossz szerinti statisztikát: 1-20, 21-40, 41-60, 61-80, 81-100!
  36. Az intervallumok mellé a hozzájuk tartozó üzenetek darabszámát írja, mint eredményt a
  37. képernyőre!\n''',
  38. 'f5':'''\n\n5. feladat
  39. - Ha Ernő minden óra 0. percében elolvasná a memóriában lévő üzeneteket (az éppen ekkor
  40. érkező üzeneteket nem látja), majd ki is törölné, akkor hány olyan üzenet lenne, amelynek
  41. elolvasásához fel kellene hívnia a szolgáltatót? Írja ezt a számot a képernyőre!
  42. (Az üzeneteket először 1, utoljára 24 órakor olvassa el.)\n''',
  43. 'f6':'''\n\n6. feladat        
  44. - Ernő barátnője gyakran küld sms-t az 123456789-es számról. Mennyi volt a leghosszabb
  45. idő, amennyi eltelt két üzenete között? Ha legfeljebb 1 üzenet érkezett tőle, akkor írja ki,
  46. hogy „nincs elegendő üzenet”, egyébként pedig adja meg a leghosszabb időtartamot óra
  47. perc alakban!\n''',
  48. 'f7':'''\n\n7. feladat        
  49. - Egy üzenet véletlenül késett. Olvassa be a billentyűzetről ennek az sms-nek az adatait,
  50. majd tárolja el a memóriában a többihez hasonlóan!\n''',
  51. 'f8':'''\n\n8. feladat        
  52. - Az smski.txt állományban készítsen egy listát az üzenetekről telefonszám szerinti
  53. csoportosításban, telefonszám szerint növekvő sorrendben!
  54. Egy csoporthoz tartozó első sorban a feladó telefonszáma szerepeljen!
  55. Az alatta lévő sorokban a feladás ideje, majd a tőle újabb szóközzel elválasztva az
  56. üzenet szövege szerepeljen!\n'''}
  57.  
  58.  
  59. class SMS:
  60.     def __init__(self,óra,perc,telefonszám,smsszöveg):
  61.         print('sms adattípus definiálása\n')
  62.         self.óra=eval(óra)
  63.         self.perc=eval(perc)
  64.         self.telefonszám=telefonszám
  65.         self.smsszöveg=smsszöveg
  66.     def __repr__(self):
  67.         return '{0.óra:0>2}:{0.perc:0>2}, {0.telefonszám}, {0.smsszöveg}'.format(self)
  68.     def __str__(self):
  69.         return repr(self)
  70.        
  71.  
  72. class SMSLista:
  73.     def __init__(self,napi_smsek_listája):
  74.         print('1. feladat megoldása:\n')
  75.         self.smsek=[]
  76.         self.telefon_memóriája=10
  77.         lista=open(napi_smsek_listája,'r',).readlines()
  78.         self.smsek_száma=int(lista[0])
  79.         for sorok in range(0,self.smsek_száma):
  80.             óra,perc,telefonszám=lista[sorok*2+1].split()
  81.             smsszöveg=lista[sorok*2+2][:-1]
  82.             elem=SMS(óra,perc,telefonszám,smsszöveg)
  83.             self.smsek.append(elem)
  84.             self.eredmény_sms('Eltárolva: ',elem)
  85.    
  86.     def legfrisebb_sms_telefonban(self):
  87.         print('2.feladat  megoldása:\n')
  88.         sms=self.smsek[0]
  89.         memória=self.telefon_memóriája
  90.         for i in self.smsek:            
  91.             if self.idő_percben(sms)<self.idő_percben(i):
  92.                 sms=i
  93.             memória-=1
  94.             if memória==0:
  95.                 break  
  96.         self.eredmény_sms('A telefonban a legfrissebb ',sms)
  97.        
  98.     def sms_hosszúsága(self):
  99.         print('3.feladat megoldása:\n')
  100.         leghosszabb_sms=self.smsek[0]
  101.         legrövidebb_sms=self.smsek[0]
  102.         for i in self.smsek:
  103.             if len(leghosszabb_sms.smsszöveg)<len(i.smsszöveg):
  104.                 leghosszabb_sms=i
  105.             if len(legrövidebb_sms.smsszöveg)>len(i.smsszöveg):
  106.                 legrövidebb_sms=i
  107.         self.eredmény_sms('Leghosszabb',leghosszabb_sms)
  108.         self.eredmény_sms('Legrövidebb',legrövidebb_sms)
  109.        
  110.     def sms_szöveg_hosszúságának_statisztikája(self,*statisztikai_sorok):
  111.         print('4.feladat megoldása \n')
  112.         for mettől,meddig in statisztikai_sorok:
  113.             számoló=0
  114.             for i in self.smsek:
  115.                 if mettől-1<len(i.smsszöveg) and meddig+1>len(i.smsszöveg):
  116.                     számoló+=1
  117.             print('{0:>3}-{1:>3} := {2:>3}'.format(mettől,meddig,számoló))
  118.  
  119.     def telefonba_nem_férő_üzenetek_száma_óránkénti_megtekintéskor(self):
  120.         print('5.feladat megoldása:\n')
  121.         eredmény=0
  122.         for i in range(1,24):
  123.             számoló=0
  124.             memória=self.telefon_memóriája
  125.             for j in self.smsek:
  126.                 if (j.óra==i and j.perc!=0) or (j.óra==i-1 and j.perc==0):
  127.                     számoló+=1
  128.             if számoló>self.telefon_memóriája:
  129.                 eredmény+=számoló-self.telefon_memóriája
  130.         print('\n{0} sms miatt kellene hívni a szolgáltatót'.format(eredmény))
  131.  
  132.     def megadott_telefonszámról_jővő_smsek_közötti_leghosszabb_idő(self,telefonszám):
  133.         print('6.feladat megoldása:\n')
  134.         leghosszabb_idő=0
  135.         érkező_smsek_ideje_percben=[]
  136.         for i in self.smsek:
  137.             if i.telefonszám==telefonszám:
  138.                 érkező_smsek_ideje_percben.append(self.idő_percben(i))
  139.         if len(érkező_smsek_ideje_percben)<2:
  140.             print('\nNincs elegendő üzenet \n')
  141.         else:
  142.             for i in range(1,len(érkező_smsek_ideje_percben)):
  143.                 aktuális_különbség=érkező_smsek_ideje_percben[i]-érkező_smsek_ideje_percben[i-1]
  144.                 if leghosszabb_idő<aktuális_különbség:
  145.                     leghosszabb_idő=aktuális_különbség                    
  146.             print('\n{0} óra {1} perc volt a leghosszabb idő két sms között ami a {2} telefonszámról jött \n'.
  147.                   format(int(leghosszabb_idő/60),leghosszabb_idő%60,telefonszám))
  148.  
  149.     def üzenet_kézi_bevitele(self):
  150.         print('7.feladat megoldása:')
  151.         adatok=('óra: ','perc: ','telefonszám: ','sms szövege: ')
  152.         sms=[]
  153.         for i in adatok:
  154.             sms.append(input(i))
  155.         elem=SMS(sms[0],sms[1],sms[2],sms[3])
  156.         self.smsek.append(elem)
  157.         self.eredmény_sms('Eltárolva: ',elem)
  158.    
  159.     def sms_csoportosítás_txtbe(self):
  160.         print('8.feladat megoldása:\n')
  161.         kiírni=open('smski.txt','w')
  162.         telefonszámok=[]
  163.         for i in self.smsek:
  164.             if telefonszámok.count(i.telefonszám)==0:
  165.                 telefonszámok.append(i.telefonszám)
  166.         telefonszámok=sorted(telefonszámok)
  167.         for i in telefonszámok:
  168.             sor='{0}\n'.format(i)
  169.             kiírni.write(sor)
  170.             print(sor[:-1])
  171.             for j in self.smsek:
  172.                 if j.telefonszám==i:
  173.                     sor='  {0:0>2}:{1:0>2} {2}\n'.format(j.óra,j.perc,j.smsszöveg)
  174.                     kiírni.write(sor)
  175.                     print(sor[:-1])
  176.         kiírni.close()
  177.  
  178.     def idő_percben(self,sms):
  179.         return sms.óra*60+sms.perc
  180.        
  181.     def eredmény_sms(self,szöveg,sms):
  182.         print(szöveg,'SMS\n {0}. érkezési ideje: {1:0>2}:{2:0>2} telefonszáma: {3}\n üzenete: {4} \n'.
  183.               format(self.smsek.index(sms)+1,sms.óra,sms.perc,sms.telefonszám,sms.smsszöveg))
  184.        
  185.  
  186. print(feladat['leírás'])
  187. print(feladat['f1'])
  188. nap=SMSLista('/home/zfoxatis/Dokumentumok/sms.txt')
  189. print(feladat['f2'])
  190. nap.legfrisebb_sms_telefonban()
  191. print(feladat['f3'])
  192. nap.sms_hosszúsága()
  193. print(feladat['f4'])
  194. nap.sms_szöveg_hosszúságának_statisztikája((1,20),(21,40),(41,60),(61,80),(81,100))
  195. print(feladat['f5'])
  196. nap.telefonba_nem_férő_üzenetek_száma_óránkénti_megtekintéskor()
  197. print(feladat['f6'])
  198. nap.megadott_telefonszámról_jővő_smsek_közötti_leghosszabb_idő('123456789')
  199. print(feladat['f7'])
  200. nap.üzenet_kézi_bevitele()
  201. print(feladat['f8'])
  202. nap.sms_csoportosítás_txtbe()
  203.  
  204.  
  205.  
  206.  
  207.  
  208. '''sms.txt'''
  209.  
  210. '''
  211. 30
  212. 9 11 123456789
  213. Szia, mikor jossz?
  214. 9 13 434324223
  215. Nem kerek ebedet!
  216. 9 14 434324223
  217. Hova menjek erted?
  218. 9 16 343567452
  219. Nem erek oda idoben. Hivd fel a fonokot es ments ki!
  220. 9 20 123456789
  221. Hozd el a mintas pulcsimat!
  222. 9 21 434324223
  223. NyertĂźnk a palyazaton!
  224. 9 40 434325432
  225. A nyelvvizsgadra mennyi potlekot kapsz? Nekem meg nem fizettek egy fillert sem. :-(
  226. 9 45 434324223
  227. A gep nem bootol be. Aramot kap, de a monitoron nem jelenik meg semmi.
  228. 9 46 434325632
  229. Hova tetted a palyazati urlapot? Mar fel oraja keressuk.
  230. 9 51 545432542
  231. Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
  232. 9 53 434324223
  233. Elvesztetted a fogadast! :-)
  234. 10 8 123456789
  235. Hol vagy mar olyan sokaig? Varlak!
  236. 10 12 454343545
  237. Add fel postan meg ma a palyazatot!
  238. 10 25 231287556
  239. Tibi megjott, majd hivd fel delben!
  240. 10 44 565643244
  241. Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
  242. 11 1 545453345
  243. Potyara jottem, az ugyfel nem volt itt.
  244. 11 3 545345345
  245. Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
  246. 11 4 853556565
  247. Sot, az urge visszalepett.
  248. 11 11 854655455
  249. Hova szallitsam a butort?
  250. 11 13 854655455
  251. Mikor kezdodik a meccs? A jegyet veszed?
  252. 11 14 123456789
  253. Este szinhazba megyunk, ugye tudod?
  254. 11 19 435435345
  255. A megrendelt konyve megerkezett.
  256. 11 21 123456789
  257. Holnap jonnek Agiek!
  258. 11 22 434324223
  259. Utalhatod a penzt a lakasert!
  260. 11 29 654647445
  261. Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
  262. 11 36 434324223
  263. Kesz a kocsi!
  264. 11 50 434324223
  265. No mi van, akarsz focizni?
  266. 12 3 434324223
  267. Lesz egy londoni ut, erdekel?
  268. 12 44 854655455
  269. Hany napra kersz szallast?
  270. 12 48 123456789
  271. A szinhaz ugrott, csotores van!
  272. '''
  273.  
  274.  
  275. '''zfoxatis@gmail.com'''
RAW Paste Data