1 class dalok:
2 def __init__(self,info):
3 self.radio=info[0] # rádiócsatorna száma
4 self.perc=info[1] # dal hossza perc
5 self.mp=info[2] # dal hossza másodperc
6 self.eloado=info[3] # előadó
7 self.cim=info[4] # dal címe
8 if len(info)>5: # egy címben van kettőspont? Vélelten? Hiba? Direkt?
9 self.cim=info[4]+':'+info[5]
10 print('---------------------------------------------------------')
11 print('1. feladat - Adatok beolvasása')
12 print('---------------------------------------------------------')
13 musor=list() # mátrix - listák listája, fájl sorai, mint listák
14 fbe=open('musor.txt','r')
15 zsz=int(fbe.readline().strip()) # fájl első sora, zeneszámok száma
16 for sor in fbe: # pl. sor = '1 5 3 Deep Purple:Bad Attitude\n'
17 sor=sor.strip().split() # pl. sor = ['1', '5', '3', 'Deep', 'Purple:Bad', 'Attitude']
18 sor[0:3]=map(int,sor[0:3]) # pl. sor = [1, 5, 3, 'Deep', 'Purple:Bad', 'Attitude']
19 eleje=sor[0:3] # pl. eleje = [1, 5, 3]
20 vege=' '.join(sor[3:]).split(':') # pl. vege = ['Deep Purple', 'Bad Attitude']
21 musor.append(eleje+vege) # musorba kerül: [1, 5, 3, 'Deep Purple', 'Bad Attitude']
22 fbe.close()
23
24 print('---------------------------------------------------------')
25 print('2. feladat - Dalok száma az egyes csatornákon')
26 print('---------------------------------------------------------')
27 radiok=dict({1:0,2:0,3:0}) # radióadók, mint szótár. kulcs a csatorna száma (dal.radio)
28 for elem in musor:
29 dal=dalok(elem) # musor egy eleméből (lista) dalok objektum
30 radiok[dal.radio]+=1 # dal, mint objektum, tudjuk használni a "mezőket", lsd fent!
31 for kulcs,ado in radiok.items(): # szótár kiírása
32 print(f'{kulcs}. csatorna: {ado} db dal.')
33
34 print('---------------------------------------------------------------------')
35 print('3. feladat - Eltelt idő az első és utolsó E.C. dal között 1. csatorna')
36 print('---------------------------------------------------------------------')
37 ea='Eric Clapton' # keresett előadó (ea)
38 first=True # először találjuk meg
39 for i, elem in enumerate(musor, start=0): # kell az index is...
40 dal=dalok(elem) # musor egy eleméből (lista) dalok objektum
41 if dal.radio==1 and dal.eloado==ea: # ha 1. csatrona és Eric Clapton, akkor...
42 if first: # ha először van meg, akkor...
43 elso=i # elso = i, azaz musoron belüli indexét tároljuk
44 first=False # ezt ne felejtsük átkapcsolni
45 else: # nem először bukkanunk Eri Claptonra...
46 utolso=i # jegyezzük meg az indexét, ez minden
47 # alkalommal frissül, így a végén az utolsó
48 # előfordulás indexe lesz meg
49
50 eltelt_ido=0
51 for i in range(elso,utolso+1): # a megfelelő indexek birtokában egyszerű összegzés
52 dal=dalok(musor[i])
53 if dal.radio==1:
54 eltelt_ido+=dal.perc*60+dal.mp
55 # óra: eltelt_ido//3600 - perc: eltelt_ido%3600//60 . másodperc: eltelt_ido%3600%60
56 print(f'{eltelt_ido} mp, azaz {eltelt_ido//3600} óra {eltelt_ido%3600//60} perc és {eltelt_ido%3600%60} másodperc.')
57
58 print('---------------------------------------------------------')
59 print('4. feladat - Omega:Legenda hol ment, és mi szólt a többin')
60 print('---------------------------------------------------------')
61 utolsok=['','',''] # ebben mindig bent lesz a 3 csatorna aktuálisan játszott dala
62 i=0 # indexekkel érjük el az elemeket a musorban
63 keres='' # keres: ebben a dal címek lesznek előadó:cím formátumban
64 while keres!='Omega:Legenda': # addig megyünk, amíg nem találjuk meg (először) az Omega:Legendát
65 dal=dalok(musor[i]) # musor egy eleméből (lista) dalok objektum
66 keres=dal.eloado+':'+dal.cim # összerakjuk az előadót és címet kettősponttal
67 utolsok[dal.radio-1]=keres # rádióadó, mint index (-1 mert index 0-tól indul)
68 i+=1 # továbblépünk a musorban a következő indexű elemre
69 # while ciklus végén a dal objektumunkban lesz az Omegára vonatkozó információ
70 print(f'Az Omega:Legenda című száma a(z) {dal.radio}. adón ment.');
71 print('Ugyanakkor:')
72 for i in range(3):
73 if i!=dal.radio-1: # az Omegás rádióadót már nem írjuk ki!
74 print(f'{i+1}. adó: {utolsok[i]}');
75
76 print('---------------------------------------------------------')
77 print('5. feladat - Melyik dalokról lehet szó (ismert részlet)')
78 print('---------------------------------------------------------')
79 fki=open('keres.txt','w')
80 keres=input('Olvasható részlet: ').lower() # az input kisbetűs lesz
81 print(keres,file=fki)
82 for elem in musor:
83 dal=dalok(elem) # # musor egy eleméből (lista) dalok objektum
84 konvertalt=(dal.eloado+':'+dal.cim).lower() # kisbetűsre konvertált előadó:cím szöveg
85 x=0 # a keres szövegünk aktuális betűjének indexe
86 for k in konvertalt: # karakterenként megyünk előre az előadó:cím szövegben
87 # ha x. indexű karaktere a keresnek passzol a k. karakterrel az előadó:cím-ben,
88 # és x még nem érte el a keres végét, akkor...
89 if x<len(keres) and keres[x]==k:
90 x+=1 # ... keresben egy karakterrel tovább mehetünk
91 if x==len(keres): # ha keres minden karakterének volt "párja", akkor...
92 print(dal.eloado+':'+dal.cim,file=fki) # az az előadó:cím szöveg mehet a fájlba
93 fki.close()
94
95 print('---------------------------------------------------------')
96 print('6. feladat - Új műsorszerkezet - új műsoridő')
97 print('---------------------------------------------------------')
98
99 hirek=3*60
100 bevezeto=1*60
101 temp=hirek # tempben számoljuk másodpercekben a műsoridőt. hírekkel kezdünk
102 ora=1 # egész órák ebben lesznek
103 for elem in musor:
104 dal=dalok(elem)
105 if dal.radio==1:
106 if temp+bevezeto+dal.perc*60+dal.mp>=(3600*ora): # egész órakor nem lenne vége a dalnak
107 holtido=(3600*ora-temp) # egész óráig "holtidő", majd
108 temp+=holtido+hirek+bevezeto+dal.perc*60+dal.mp # lejátszák a dalt bevezetővel együtt
109 ora+=1 # órát noveljük
110 else:
111 temp+=bevezeto+dal.perc*60+dal.mp # normál eset: csak növeljük a műsoridőt
112 print(f'1. rádió - Adás vége az új műsorszerkezetben: {temp//3600}:{temp%3600//60}:{temp%3600%60}')
113
114
115
116
117
118
119