zene200610.py
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