loves201405idny.py
1    lovesek=[]      #lista szövegelemekkel (pl.: '+-++--+-')
2    #--------------------------------------------------------------------------------
3    # 1. Olvassa be a verseny.txt állományban található adatokat, és annak
4    #    felhasználásával oldja meg a következő feladatokat!
5    #--------------------------------------------------------------------------------
6    def F1():
7        print('1.feladat:\nadatok beolvasása')
8    
9        fbe=open('verseny.txt','r')
10       global vsz
11       vsz=int(fbe.readline())         #első sorban a versnyzők száma van
12       for sor in fbe:                 #további sorok beolvasása ciklikusan
13           lovesek.append(sor.strip())
14       fbe.close()
15       print(lovesek)
16   #--------------------------------------------------------------------------------
17   # 2. Írja a képernyőre azon versenyzők rajtszámát, akiknek egymás után két
18   #    (vagy több) lövése is talált! A versenyzők rajtszámát egy-egy szóközzel
19   #    válassza el egymástól!
20   #--------------------------------------------------------------------------------
21   def F2():
22       print('\n2. feladat:')
23       print('Az egymast kovetoen tobbszor talalo versenyzok:',end=' ')
24       for i,loves in enumerate(lovesek,1):
25           if loves.find('++')>-1:
26               print(i,end=' ')
27           
28       print()
29   #--------------------------------------------------------------------------------
30   # 3. Írja a képernyőre, hogy melyik versenyző adta le a legtöbb lövést!
31   #    Ha többen is ugyanannyi lövést adtak le, elegendő egyikük rajtszámát kiírni.
32   #--------------------------------------------------------------------------------
33   def F3():
34       print('\n3.feladat:')
35       maxsorozat=0
36       for i,loves in enumerate(lovesek,1):
37           if len(loves)>maxsorozat:
38               maxsorozat=len(loves)
39               nyero=i
40       print('A legtobb lovest leado versenyzo rajtszama: %d' %nyero)
41   #--------------------------------------------------------------------------------
42   # 4. Készítsen függvényt loertek néven az alábbi algoritmus alapján! A függvény
43   #    egy + és – jeleket tartalmazó, legfeljebb 40 hosszúságú karaktersorozathoz
44   #    hozzárendeli a feladatban képviselt pontértékét. A függvény elkészítésekor
45   #    az algoritmusban megadott változóneveket használja! Az elkészített függvényt
46   #    a további feladatok megoldásánál használja fel! A függvény bemenő paramétere
47   #    az egy játékos lövéseit leíró karaktersorozat, értéke pedig az ahhoz rendelt
48   #    pontszám.
49   #           Függvény loertek(sor:karaktersorozat):egész szám
50   #               aktpont:=20
51   #               ertek:=0
52   #               Ciklus i:=1-től hossz(sor)-ig
53   #                   Ha aktpont>0 és sor[i]=”-” akkor
54   #                       aktpont:=aktpont-1
55   #                   Különben
56   #                       ertek:=ertek+aktpont
57   #                   Elágazás vége
58   #               Ciklus vége
59   #               loertek:=ertek
60   #           Függvény vége
61   #--------------------------------------------------------------------------------
62   def loertek(sor):
63       aktpont=20
64       ertek=0
65       for i in range(len(sor)):
66           if aktpont>0 and sor[i]=='-':
67               aktpont-=1
68           else:
69               ertek+=aktpont
70       return ertek
71   #--------------------------------------------------------------------------------
72   # 5. Kérje be a felhasználótól egy versenyző sorszámát, majd írja ki, hogy:
73   #   a. hányadik lövései találtak (az értékeket egymástól szóközzel válassza el!)
74   #   b. hány korongot talált el összesen
75   #   c. milyen hosszú volt a leghosszabb hibátlan lövéssorozata
76   #   d. hány pontot ért el!
77   #   Az eredmény megjelenítése előtt írja képernyőre a részfeladat betűjelét is!
78   #--------------------------------------------------------------------------------
79   def F5():
80       print('\n5.feladat:')
81       rajtszam=int(input('Adjon meg egy rajtszamot! '))-1
82       print('5a. feladat: Celt ero lovesek: ',end='')
83       talalat=0
84       hibatlan_hossz,hossz=0,0
85       for i,loves in enumerate(lovesek[rajtszam],1):
86           if loves=='+':
87               print(i,end=' ')
88               talalat+=1
89               hossz+=1
90           else:
91               if hossz>hibatlan_hossz:
92                   hibatlan_hossz=hossz
93               hossz=0
94                   
95       print()
96       print('5b. feladat: Az eltalalt korongok szama: %d' %talalat)
97       print('5c. feladat: A leghosszabb hibatlan sorozat hossza: %d' %hibatlan_hossz)
98       print('5d. feladat: A versenyzo pontszama: %d' %loertek(lovesek[rajtszam]))
99   #--------------------------------------------------------------------------------
100  # 6. Állítsa elő a sorrend.txt állományban a verseny végeredményét! A fájlban
101  #    soronként tüntesse fel a versenyző helyezését, rajtszámát és pontszámát!
102  #    A helyezés megadásakor a holtversenyt a bevezetőben megfogalmazott szabályok
103  #    alapján az alábbi mintához hasonlóan kezelje! Az adatokat egy-egy
104  #    tabulátorral (ASCII kódja a 9-es) válassza el egymástól! A lista legyen
105  #    pontszám szerint csökkenő!
106  #    Például a feladat elején olvasható példa bemenet esetén a fájl tartalma:
107  #       1   2   73
108  #       2   4   40
109  #       3   1   38
110  #       3   5   38
111  #       5   3   36
112  #--------------------------------------------------------------------------------
113  def F6():
114      print('6.feladat:\nadatok fájlba írása')
115      fki=open('sorrend.txt','w')
116      pontszamok=[]   #Ennek a listának adatpár (tuple) elemei lesznek: (rajtszam,pontszam)
117      for i,loves in enumerate(lovesek,1):
118          pontszamok.append((i,loertek(loves)))
119      #Rendezés pontszámok szerint csökkenő sorrendbe
120      pontszamok=sorted(pontszamok,key=lambda x:x[1],reverse=True)
121      print(pontszamok)
122  
123      
124      pontsz=-1   #Kamu adat, ennél biztosan nagyobb (legalább 0) pontszáma lesz bárkinek!
125      for i,pont in enumerate(pontszamok,1):
126          if pont[1]!=pontsz:     #Ha az katuális ember pontszáma eltér az előzőtől, akkor
127              helyezes=i          #helyezése a fizikai sorszáma a rendezett listában,
128              pontsz=pont[1]      #és a következő cikluslépésre előkészítem a pontsz adatot
129          
130          print(helyezes,'\t',pont[0],'\t',pont[1],file=fki)
131      fki.close()
132          
133      
134                            
135  #-------------------------------F Ő M O D U L------------------------------------
136  F1()
137  F2()
138  F3()
139  F5()
140  F6()
141  
142