1 def kiir(ssz, szoveg): 2 print('%d. feladat - %s' % (ssz, szoveg)) 3 4 5 # ----------------------------------------------------------------------- 6 # 1. Olvassa be és tárolja el a valaszok.txt szöveges állomány adatait! 7 # ----------------------------------------------------------------------- 8 kiir(1, 'fájl beolvasása') 9 10 fv = open('valaszok.txt', 'r') 11 megoldas = fv.readline() # a forrásfájl első sora 12 print('...') 13 14 adatok = [] # mátrix: elemei AZONOSÍTÓ és VÁLASZ 15 16 for sor in fv: 17 sor = sor.strip().split() 18 adatok.append(sor) 19 20 fv.close() 21 22 # ----------------------------------------------------------------------- 23 # 2. Jelenítse meg a képernyőn a mintának megfelelően, hogy hány 24 # versenyző vett részta tesztversenyen! 25 # ----------------------------------------------------------------------- 26 kiir(2, 'versenyzők száma') 27 28 vsz = len(adatok) # versenyzők száma=fájlból első sor kivételével 29 # beolvasott adatsorok száma 30 print('A vetélkedőn {} versenyző indult.'.format(vsz)) 31 32 # ----------------------------------------------------------------------- 33 # 3. Kérje be egy versenyző azonosítóját, és jelenítse meg a mintának 34 # megfelelően a hozzá eltárolt válaszokat! Feltételezheti, hogy a 35 # fájlban létező azonosítót adnak meg. 36 # ----------------------------------------------------------------------- 37 kiir(3, 'versenyző és válasza') 38 39 # megkeressük az azonosítót a mátrixban és kiírjuk a válaszát, 40 # addig ismételtetjük az INPUT parancsot, amíg nem ad meg jó 41 # azonosító kódot! 42 van = False 43 while not van: 44 # UPPER - az input egy stringet ad, az lesz nagybetűs 45 vaz = input('A versenyző azonosítója = ').upper() 46 i = 0 47 while i < len(adatok) and adatok[i][0] != vaz: 48 i += 1 49 if i < len(adatok): 50 van = True 51 valasz = adatok[i][1] # 4. feladathoz kell majd 52 print('A versenyző válasza: ', valasz) 53 54 # ----------------------------------------------------------------------- 55 # 4. Írassa ki a képernyőre a helyes megoldást! A helyes megoldás alatti 56 # sorba „+” jelet tegyen, ha az adott feladatot az előző feladatban 57 # kiválasztott versenyző eltalálta, egyébként egy szóközt! A kiírást 58 # a mintának megfelelő módon alakítsa ki! 59 # ----------------------------------------------------------------------- 60 kiir(4, 'a megoldás és a versenyző válasza') 61 62 print(megoldas, end='') 63 for i in range(len(valasz)): 64 if valasz[i] == megoldas[i]: 65 print('+', end='') 66 else: 67 print(' ', end='') 68 print() 69 70 # ----------------------------------------------------------------------- 71 # 5. Kérje be egy feladat sorszámát, majd határozza meg, hogy hány 72 # versenyző adott a feladatra helyes megoldást, és ez a versenyzők 73 # hány százaléka! A százalékos eredményt a mintának megfelelően, 74 # két tizedesjeggyel írassa ki! 75 # ----------------------------------------------------------------------- 76 kiir(5, 'egy adott feladatra adott helyes válaszok aránya') 77 78 letszam = len(adatok) 79 80 # feladat sorszáma: 1-14 közötti szám 81 # megpróbáljuk rávenni a felhasználót, hogy 1-14 közötti számot adjon meg! 82 # (ez nem követelmény!) 83 84 while True: 85 try: 86 sorszam = int(input('A feladat sorszáma = ')) 87 if sorszam < 1 or sorszam > 14: 88 print('1-14 közötti számot kell megadni!!') 89 else: 90 break 91 except ValueError: 92 print('Csalódtam benned!') 93 sorszam -= 1 # -1 az indexelés miatt, szokásos :( 94 szamlalo = 0 # helyes megoldások száma, gyakorlatilag összegzés következik 95 for adat in adatok: 96 valasz = adat[1] # a második eleme az adatnak a válasz 97 if valasz[sorszam] == megoldas[sorszam]: 98 szamlalo += 1 99 arany = szamlalo / letszam 100 print(f'A feladatra {szamlalo} fő, a versenyzők {arany * 100:.2f}%-a adott helyes választ.') 101 102 # ----------------------------------------------------------------------- 103 # 6. A verseny feladatai nem egyenlő nehézségűek: 104 # az 1-5. feladat 3 pontot, a 6-10. feladat 4 pontot, 105 # a 11-13. feladat 5 pontot, míg a 14. feladat 6 pontot ér. 106 # Határozza meg az egyes versenyzők pontszámát, és a listát írassa 107 # ki a pontok.txt nevű állományba! Az állomány minden sora egy 108 # versenyző kódját, majd szóközzel elválasztva az általa elért 109 # pontszámot tartalmazza! 110 # ----------------------------------------------------------------------- 111 kiir(6, 'versenyzők pontszámának meghatározása') 112 print('...') 113 114 pontok = [3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6] 115 116 117 # ez a lista jelentősen leegyszerűsíti a megoldást 118 119 def pontszamitas(valasz): 120 pontszam = 0 121 for i in range(len(valasz)): 122 if valasz[i] == megoldas[i]: 123 # i-dik válasz jó, akkor i-dik pont a pontok listából 124 pontszam += pontok[i] 125 return pontszam 126 127 128 fv = open('pontok.txt', 'w') 129 130 dijazas = [] # 7.feladathoz kell majd 131 for adat in adatok: 132 pontszam = pontszamitas(adat[1]) 133 # 7.feladat miatt külön változóba kerül a pontszám 134 print(adat[0], pontszam, file=fv) 135 # 7.feladat hatására, rögzítjük az eredményeket 136 dijazas.append([adat[0], pontszam]) 137 fv.close() 138 139 # ----------------------------------------------------------------------- 140 # 7. A versenyen a három legmagasabb pontszámot elérő összes versenyzőt 141 # díjazzák. Például 5 indulónál előfordulhat, hogy 3 első és 2 142 # második díjat adnak ki. Így megtörténhet az is, hogy nem kerül sor 143 # mindegyik díj kiadására. Írassa ki a mintának megfelelően a 144 # képernyőre a díjazottak kódját és pontszámát pontszám szerint 145 # csökkenő sorrendben! 146 # ----------------------------------------------------------------------- 147 kiir(7, 'versenyzők díjazása') 148 149 150 # ez a feladat hatással van az előzőre, a 6. feladatra. Ne csak fájlba 151 # írjuk az azonosítót és a pontszámot, hanem rögzítsük is egy mátrixban 152 # ezeket az adatokat! ---> dijazas "mátrix" 153 154 # rendezzük be a "mátrixot" pontszám szerint csökkenő sorrendbe! 155 156 def pontszam_szerint(elem): 157 return elem[1] # 1-es index, azaz a másod elem vagyis a pontszám 158 159 160 dijazas = sorted(dijazas, key=pontszam_szerint, reverse=True) 161 162 print('A verseny legjobbjai:') 163 164 dijazottak_szama = 1 # maximum 3 lehet 165 helyezes = 1 # helyezési sorrend, pl.: 1. vagy 2., stb.... 166 # a rendezett "mátrix" első sor az 1. helyezettet tartalmazza 167 # ezt kiiírjuk, és a következő versenyzőt hozzás viszonyítjuk... 168 print('{}. díj ({} pont): {}'.format(helyezes, dijazas[0][1], dijazas[0][0])) 169 i = 1 # másodiktól megy majd a ciklus (while) 170 while dijazottak_szama < 4: 171 if dijazas[i][1] != dijazas[i - 1][1]: # ha eltérő pontszám jön, akkor... 172 helyezes += 1 # ...növeljük a helyzési sorszámot 173 print('{}. díj ({} pont): {}'.format(helyezes, dijazas[i][1], dijazas[i][0])) 174 dijazottak_szama += 1 # ez független a helyezéstől 175 i += 1 # ez csak azért kell, hogy ne a 176 # dijazottak_szama változót használjam indexnek