1 # FOCI - 2007 október (november)2 class game:3 def __init__(self,lst): # lst - lista a fájl egy sorából4 self.hg=lst[0] # hazai gólok (végeredmény)5 self.vg=lst[1] # vendég gólok (végeredmény)6 self.fhg=lst[2] # hazai gólok (félidő)7 self.fvg=lst[3] # vendég gólok (félidő)8 self.hcs=lst[4] # hazai csapat neve9 self.vcs=lst[5] # vendégcsapat neve10 # 3. feladathoz kell majd11 self.ford='' # fordított-e a félideji eredményhez képest a végén12 # hazai csapatként félidőben vesztésre állt, de a végén győzött13 if self.fhg<self.fvg and self.hg>self.vg:14 self.ford=self.hcs # a hazai csapat neve kerül bele a self.ford-ba15 # vendégcsapatként félidőben vesztésre állt, de a végén győzött16 if self.fhg>self.fvg and self.hg<self.vg:17 self.ford=self.vcs # a vendégcsapat neve kerül bele a self.ford-ba18 19 # objektum kiírása hogyan történjen, ezt definiáljuk itt20 def __str__(self):21 return f'{self.hcs}-{self.vcs}: {self.hg}-{self.vg} ({self.fhg}-{self.fvg})'22 23 def kiir(ssz,szoveg):24 print('-------------------------------------------------------------')25 print(f'{ssz}. feladat - {szoveg}')26 print('-------------------------------------------------------------')27 28 def inicializalas(d): # d, mint dict29 for i in range(1,21): # maximum 20 forduló van30 d[i]=[] # szótár kulcsa a forduló száma, értéke egy lista (mátrix)31 32 def F1():33 kiir(1,'Adabeolvasás')34 fbe=open('meccs.txt','r') 35 global m36 m=dict() # üres szótár: ebben tároljuk fordulónként a meccsek adatait37 inicializalas(m) # saját függvényünk felhasználása38 n=int(fbe.readline().strip()) # fájl első sorának beolvasása39 for sor in fbe:40 sor=sor.strip().split() # fájl minden további sora egy lista lesz41 sor[0:5]=map(int,sor[0:5]) # első 5 elem int típusú42 # m szótár feltöltése43 kulcs=sor[0] # kulcs a forduló száma44 ertek=sor[1:] # a lista "maradék" elemei45 m[kulcs].append(ertek) # a szótár adott kulcsú értékéhez hozzáadjuk a listát46 # a szótár értéke így egy mátrix (listák listája) lesz47 fbe.close()48 49 def F2():50 kiir(2,'Adott forduló mérkőzései')51 fs=int(input('forduló: '))52 for meccs in m[fs]: # a szótár fs kulcshoz tartozó mátrixának bejárása53 g=game(meccs) # a listából game objektumot készítünk54 print(g) # az objektum kiírása a CLASS-ban leír definiálás szerint55 56 def F3():57 kiir(3,'Kinek sikerült fordítani (ford csapat)')58 # for kulcs in m.keys():59 # for ertek in m.values()60 61 for kulcs,listak in m.items(): # kulcs, azaz a forduló sorszáma, listak a mátrixunk62 for meccs in listak: # meccs - adott kulcshoz tartozó meccsekből egy meccs 63 g=game(meccs) # a listából game objektumot készítünk64 if g.ford!='': # ezt készítettük elő a CLASS-ban, ha üres nem fordított65 print(kulcs,g.ford) # g.ford-ban a megfelelő csapat neve van, lsd. CLASS66 67 def F4():68 kiir(4,'Csapatnév bolvasása')69 global csn70 csn=input('Kérem a csapat nevét: ')71 72 def F5_6():73 # az 5. és 6. feladatot egy modulban oldjuk meg74 kiir(5,'Adott csapat: lőtt és kapott gólok száma')75 76 eloszor=077 lott,kapott=0,078 for kulcs,listak in m.items():79 for meccs in listak:80 g=game(meccs)81 82 if g.hcs==csn: # hazai csapatként van meg83 if g.hg<g.vg: # kikapott-e otthon84 if eloszor==0: # ha kikapott, először történt-e ez?85 eloszor=kulcs # ha igen, eloszor-be a forduló sorszámát (kulcs) tesszük86 ellenfel=g.vcs # rögzítjük az ellenfelet is (6. feladat)87 lott+=g.hg # 5. feladat: összegezzük a lőtt és kapott gólokat88 kapott+=g.vg89 if g.vcs==csn: # vendég csapatként van meg90 lott+=g.vg91 kapott+=g.hg92 print(f'Lőtt gólok száma: {lott}, kapott gólok száma: {kapott}')93 94 kiir(6,'Adott csapat első veresége otthon')95 valasz='A csapat otthon veretlen maradt.' if eloszor==0 else str(eloszor)+'. fordulóban ('+ellenfel+')'96 print(valasz)97 98 def F7():99 kiir(7,'Eredmény-statisztika')100 101 gol_matrix=[] # 10x10-es mátrix: listák listája nulla kezdőértékekkel102 for i in range(10):103 gol_matrix.append([0]*10) # mátrix: 10 db olyan lista, aminek egy 10 elemű lista az eleme104 105 for listak in m.values():106 for meccs in listak:107 g=game(meccs)108 sor=g.hg if g.hg>=g.vg else g.vg # mátrix "sor" mindig a nagyobb gólszám109 oszl=g.hg if g.hg<g.vg else g.vg # mátrix "oszlop" mindig a kisebb gólszám110 gol_matrix[sor][oszl]+=1 # tehát maguk a gólok indexelik a mátrixot111 fki=open('stat.txt','w') 112 for i in range(10):113 for j in range(0,i+1): # range azért ilyen, hogy ne írjunk ki pl. 5-7 eredményt114 if gol_matrix[i][j]!=0: # elég csak azokat a sorokat kiírni, ahol volt is valami, szerintem...115 print(f'{i}-{j}: {gol_matrix[i][j]} darab')116 print(f'{i}-{j}: {gol_matrix[i][j]} darab',file=fki)117 fki.close()118 119 # ********************** F Ő M O D U L **********************120 F1()121 F2()122 F3()123 F4()124 F5_6()125 F7()126