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