foci201710_class.py
1    # FOCI - 2007 október (november)
2    class game:
3        def __init__(self,lst):     # lst - lista a fájl egy sorából
4            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 neve
9            self.vcs=lst[5]         # vendégcsapat neve
10           # 3. feladathoz kell majd
11           self.ford=''            # fordított-e a félideji eredményhez képest a végén
12           # hazai csapatként félidőben vesztésre állt, de a végén győzött
13           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-ba
15           # vendégcsapatként félidőben vesztésre állt, de a végén győzött
16           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-ba
18           
19       # objektum kiírása hogyan történjen, ezt definiáljuk itt
20       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 dict
29       for i in range(1,21):       # maximum 20 forduló van
30           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 m
36       m=dict()                    # üres szótár: ebben tároljuk fordulónként a meccsek adatait
37       inicializalas(m)            # saját függvényünk felhasználása
38       n=int(fbe.readline().strip())   # fájl első sorának beolvasása
39       for sor in fbe:
40           sor=sor.strip().split()     # fájl minden további sora egy lista lesz
41           sor[0:5]=map(int,sor[0:5])  # első 5 elem int típusú
42           # m szótár feltöltése
43           kulcs=sor[0]                # kulcs a forduló száma
44           ertek=sor[1:]               # a lista "maradék" elemei
45           m[kulcs].append(ertek)      # a szótár adott kulcsú értékéhez hozzáadjuk a listát
46                                       # a szótár értéke így egy mátrix (listák listája) lesz
47       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ása
53           g=game(meccs)               # a listából game objektumot készítünk
54           print(g)                    # az objektum kiírása a CLASS-ban leír definiálás szerint
55       
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átrixunk
62           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ünk
64               if g.ford!='':          # ezt készítettük elő a CLASS-ban, ha üres nem fordított
65                   print(kulcs,g.ford) # g.ford-ban a megfelelő csapat neve van, lsd. CLASS
66   
67   def F4():
68       kiir(4,'Csapatnév bolvasása')
69       global csn
70       csn=input('Kérem a csapat nevét: ')
71   
72   def F5_6():
73       # az 5. és 6. feladatot egy modulban oldjuk meg
74       kiir(5,'Adott csapat: lőtt és kapott gólok száma')
75       
76       eloszor=0
77       lott,kapott=0,0
78       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 meg
83                   if g.hg<g.vg:   # kikapott-e otthon
84                       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ük
86                           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ólokat
88                   kapott+=g.vg
89               if g.vcs==csn:      # vendég csapatként van meg
90                   lott+=g.vg
91                   kapott+=g.hg
92       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ékekkel
102      for i in range(10):
103          gol_matrix.append([0]*10)   # mátrix: 10 db olyan lista, aminek egy 10 elemű lista az eleme
104  
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ám
109              oszl=g.hg if g.hg<g.vg else g.vg        # mátrix "oszlop" mindig a kisebb gólszám
110              gol_matrix[sor][oszl]+=1                # tehát maguk a gólok indexelik a mátrixot
111      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ényt
114              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