Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- #-*-coding:utf-8-*-
- feladat={'leírás':'''2008-as emelt szintű számtech érettségi \n\n4.sz programozás feladata\n
- Esemes Ernő szenvedélyes SMS-küldő, ezért a MaMobil nevű cég tesztelésre kérte fel.
- Ehhez egy új, kézreálló telefont adnak, amelynek tesztüzemben egyetlen hátránya,
- hogy legfeljebb az először érkező 10 darab, egyenként legfeljebb 100 karakteres
- üzenetet tud eltárolni. Ha ettől több üzenet van, akkor azokat korlátlan számban
- a szolgáltató őrzi meg a hangpostához hasonlóan, tehát azokhoz csak bizonyos díj
- fejében juthat hozzá. Az üzenetek nem tartalmazhatnak ékezetes karaktereket.
- Az sms.txt állomány első sorában az a k szám olvasható, amely megadja, hogy hány
- üzenet érkezett a készülékre a mai napon. Az érkező üzenetek száma legalább egy,
- de nem haladja meg a 100 darabot. Minden üzenethez 2 sor tartozik. Az első sor
- szerkezete a következő: először az érkezés órája (szám), érkezés perce (szám),
- telefonszám (pontosan 9 jegyű szám), a másodikban pedig az üzenet (legfeljebb
- 100 karakternyi szöveg) található. Az állományban az üzenetek számát követően
- k×2 sor szerepel. Az üzenetek érkezési idő szerint növekvően rendezettek.
- - Készítsen programot sms néven, amely az alábbi kérdésekre válaszol!
- - Ügyeljen arra, hogy a program forráskódját a megadott helyre mentse!
- - A képernyőre írást igénylő részfeladatok eredményének megjelenítése
- előtt írja a képernyőre a feladat sorszámát! (Például 3. feladat: )\n''',
- 'f1':'''\n1. feladat:
- - Olvassa be az sms.txt állományban talált adatokat, s annak felhasználásával
- oldja meg a következő feladatokat! Ha az állományt nem tudja beolvasni, akkor
- a benne található adatok közül az első tíz üzenet adatait jegyezze be a programba,
- s úgy oldja meg a feladatokat!\n''',
- 'f2':'''\n\n2. feladat
- - A fájlban tárolt utolsó üzenet érkezésekor melyik üzenet a legfrissebb a telefon
- memóriájában? Írja az üzenet szövegét a képernyőre!\n''',
- 'f3':'''\n\n3. feladat
- - Adja meg a leghosszabb és a legrövidebb üzenetek adatait! Ha több azonos hosszúságú
- üzenet van, akkor elegendő csak egyet-egyet megadnia!
- A képernyőn óra, perc, telefonszám, üzenet formában jelenítse meg az adatokat!\n''',
- 'f4':'''\n\n4. feladat
- - Készítsen karakterhossz szerinti statisztikát: 1-20, 21-40, 41-60, 61-80, 81-100!
- Az intervallumok mellé a hozzájuk tartozó üzenetek darabszámát írja, mint eredményt a
- képernyőre!\n''',
- 'f5':'''\n\n5. feladat
- - Ha Ernő minden óra 0. percében elolvasná a memóriában lévő üzeneteket (az éppen ekkor
- érkező üzeneteket nem látja), majd ki is törölné, akkor hány olyan üzenet lenne, amelynek
- elolvasásához fel kellene hívnia a szolgáltatót? Írja ezt a számot a képernyőre!
- (Az üzeneteket először 1, utoljára 24 órakor olvassa el.)\n''',
- 'f6':'''\n\n6. feladat
- - Ernő barátnője gyakran küld sms-t az 123456789-es számról. Mennyi volt a leghosszabb
- idő, amennyi eltelt két üzenete között? Ha legfeljebb 1 üzenet érkezett tőle, akkor írja ki,
- hogy „nincs elegendő üzenet”, egyébként pedig adja meg a leghosszabb időtartamot óra
- perc alakban!\n''',
- 'f7':'''\n\n7. feladat
- - Egy üzenet véletlenül késett. Olvassa be a billentyűzetről ennek az sms-nek az adatait,
- majd tárolja el a memóriában a többihez hasonlóan!\n''',
- 'f8':'''\n\n8. feladat
- - Az smski.txt állományban készítsen egy listát az üzenetekről telefonszám szerinti
- csoportosításban, telefonszám szerint növekvő sorrendben!
- Egy csoporthoz tartozó első sorban a feladó telefonszáma szerepeljen!
- Az alatta lévő sorokban a feladás ideje, majd a tőle újabb szóközzel elválasztva az
- üzenet szövege szerepeljen!\n'''}
- class SMS:
- def __init__(self,óra,perc,telefonszám,smsszöveg):
- print('sms adattípus definiálása\n')
- self.óra=eval(óra)
- self.perc=eval(perc)
- self.telefonszám=telefonszám
- self.smsszöveg=smsszöveg
- def __repr__(self):
- return '{0.óra:0>2}:{0.perc:0>2}, {0.telefonszám}, {0.smsszöveg}'.format(self)
- def __str__(self):
- return repr(self)
- class SMSLista:
- def __init__(self,napi_smsek_listája):
- print('1. feladat megoldása:\n')
- self.smsek=[]
- self.telefon_memóriája=10
- lista=open(napi_smsek_listája,'r',).readlines()
- self.smsek_száma=int(lista[0])
- for sorok in range(0,self.smsek_száma):
- óra,perc,telefonszám=lista[sorok*2+1].split()
- smsszöveg=lista[sorok*2+2][:-1]
- elem=SMS(óra,perc,telefonszám,smsszöveg)
- self.smsek.append(elem)
- self.eredmény_sms('Eltárolva: ',elem)
- def legfrisebb_sms_telefonban(self):
- print('2.feladat megoldása:\n')
- sms=self.smsek[0]
- memória=self.telefon_memóriája
- for i in self.smsek:
- if self.idő_percben(sms)<self.idő_percben(i):
- sms=i
- memória-=1
- if memória==0:
- break
- self.eredmény_sms('A telefonban a legfrissebb ',sms)
- def sms_hosszúsága(self):
- print('3.feladat megoldása:\n')
- leghosszabb_sms=self.smsek[0]
- legrövidebb_sms=self.smsek[0]
- for i in self.smsek:
- if len(leghosszabb_sms.smsszöveg)<len(i.smsszöveg):
- leghosszabb_sms=i
- if len(legrövidebb_sms.smsszöveg)>len(i.smsszöveg):
- legrövidebb_sms=i
- self.eredmény_sms('Leghosszabb',leghosszabb_sms)
- self.eredmény_sms('Legrövidebb',legrövidebb_sms)
- def sms_szöveg_hosszúságának_statisztikája(self,*statisztikai_sorok):
- print('4.feladat megoldása \n')
- for mettől,meddig in statisztikai_sorok:
- számoló=0
- for i in self.smsek:
- if mettől-1<len(i.smsszöveg) and meddig+1>len(i.smsszöveg):
- számoló+=1
- print('{0:>3}-{1:>3} := {2:>3}'.format(mettől,meddig,számoló))
- def telefonba_nem_férő_üzenetek_száma_óránkénti_megtekintéskor(self):
- print('5.feladat megoldása:\n')
- eredmény=0
- for i in range(1,24):
- számoló=0
- memória=self.telefon_memóriája
- for j in self.smsek:
- if (j.óra==i and j.perc!=0) or (j.óra==i-1 and j.perc==0):
- számoló+=1
- if számoló>self.telefon_memóriája:
- eredmény+=számoló-self.telefon_memóriája
- print('\n{0} sms miatt kellene hívni a szolgáltatót'.format(eredmény))
- def megadott_telefonszámról_jővő_smsek_közötti_leghosszabb_idő(self,telefonszám):
- print('6.feladat megoldása:\n')
- leghosszabb_idő=0
- érkező_smsek_ideje_percben=[]
- for i in self.smsek:
- if i.telefonszám==telefonszám:
- érkező_smsek_ideje_percben.append(self.idő_percben(i))
- if len(érkező_smsek_ideje_percben)<2:
- print('\nNincs elegendő üzenet \n')
- else:
- for i in range(1,len(érkező_smsek_ideje_percben)):
- aktuális_különbség=érkező_smsek_ideje_percben[i]-érkező_smsek_ideje_percben[i-1]
- if leghosszabb_idő<aktuális_különbség:
- leghosszabb_idő=aktuális_különbség
- 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'.
- format(int(leghosszabb_idő/60),leghosszabb_idő%60,telefonszám))
- def üzenet_kézi_bevitele(self):
- print('7.feladat megoldása:')
- adatok=('óra: ','perc: ','telefonszám: ','sms szövege: ')
- sms=[]
- for i in adatok:
- sms.append(input(i))
- elem=SMS(sms[0],sms[1],sms[2],sms[3])
- self.smsek.append(elem)
- self.eredmény_sms('Eltárolva: ',elem)
- def sms_csoportosítás_txtbe(self):
- print('8.feladat megoldása:\n')
- kiírni=open('smski.txt','w')
- telefonszámok=[]
- for i in self.smsek:
- if telefonszámok.count(i.telefonszám)==0:
- telefonszámok.append(i.telefonszám)
- telefonszámok=sorted(telefonszámok)
- for i in telefonszámok:
- sor='{0}\n'.format(i)
- kiírni.write(sor)
- print(sor[:-1])
- for j in self.smsek:
- if j.telefonszám==i:
- sor=' {0:0>2}:{1:0>2} {2}\n'.format(j.óra,j.perc,j.smsszöveg)
- kiírni.write(sor)
- print(sor[:-1])
- kiírni.close()
- def idő_percben(self,sms):
- return sms.óra*60+sms.perc
- def eredmény_sms(self,szöveg,sms):
- print(szöveg,'SMS\n {0}. érkezési ideje: {1:0>2}:{2:0>2} telefonszáma: {3}\n üzenete: {4} \n'.
- format(self.smsek.index(sms)+1,sms.óra,sms.perc,sms.telefonszám,sms.smsszöveg))
- print(feladat['leírás'])
- print(feladat['f1'])
- nap=SMSLista('/home/zfoxatis/Dokumentumok/sms.txt')
- print(feladat['f2'])
- nap.legfrisebb_sms_telefonban()
- print(feladat['f3'])
- nap.sms_hosszúsága()
- print(feladat['f4'])
- nap.sms_szöveg_hosszúságának_statisztikája((1,20),(21,40),(41,60),(61,80),(81,100))
- print(feladat['f5'])
- nap.telefonba_nem_férő_üzenetek_száma_óránkénti_megtekintéskor()
- print(feladat['f6'])
- nap.megadott_telefonszámról_jővő_smsek_közötti_leghosszabb_idő('123456789')
- print(feladat['f7'])
- nap.üzenet_kézi_bevitele()
- print(feladat['f8'])
- nap.sms_csoportosítás_txtbe()
- '''sms.txt'''
- '''
- 30
- 9 11 123456789
- Szia, mikor jossz?
- 9 13 434324223
- Nem kerek ebedet!
- 9 14 434324223
- Hova menjek erted?
- 9 16 343567452
- Nem erek oda idoben. Hivd fel a fonokot es ments ki!
- 9 20 123456789
- Hozd el a mintas pulcsimat!
- 9 21 434324223
- NyertĂźnk a palyazaton!
- 9 40 434325432
- A nyelvvizsgadra mennyi potlekot kapsz? Nekem meg nem fizettek egy fillert sem. :-(
- 9 45 434324223
- A gep nem bootol be. Aramot kap, de a monitoron nem jelenik meg semmi.
- 9 46 434325632
- Hova tetted a palyazati urlapot? Mar fel oraja keressuk.
- 9 51 545432542
- Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
- 9 53 434324223
- Elvesztetted a fogadast! :-)
- 10 8 123456789
- Hol vagy mar olyan sokaig? Varlak!
- 10 12 454343545
- Add fel postan meg ma a palyazatot!
- 10 25 231287556
- Tibi megjott, majd hivd fel delben!
- 10 44 565643244
- Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
- 11 1 545453345
- Potyara jottem, az ugyfel nem volt itt.
- 11 3 545345345
- Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
- 11 4 853556565
- Sot, az urge visszalepett.
- 11 11 854655455
- Hova szallitsam a butort?
- 11 13 854655455
- Mikor kezdodik a meccs? A jegyet veszed?
- 11 14 123456789
- Este szinhazba megyunk, ugye tudod?
- 11 19 435435345
- A megrendelt konyve megerkezett.
- 11 21 123456789
- Holnap jonnek Agiek!
- 11 22 434324223
- Utalhatod a penzt a lakasert!
- 11 29 654647445
- Erdekli Ont egy telefon? A vezetek nelkuli telefon most a legolcsobb!
- 11 36 434324223
- Kesz a kocsi!
- 11 50 434324223
- No mi van, akarsz focizni?
- 12 3 434324223
- Lesz egy londoni ut, erdekel?
- 12 44 854655455
- Hany napra kersz szallast?
- 12 48 123456789
- A szinhaz ugrott, csotores van!
- '''
- '''zfoxatis@gmail.com'''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement