Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Informacinių technologijų mokytoja Giedrė sugalvojo penkių variantų žinių patikrinamuosius testus mokiniams.
- Kiekvieną testą sudaro 10 klausimų, vertinamų taškais nuo 0 iki 3.
- Testas yra išlaikytas, jeigu mokinys surinko ne mažiau kaip pusę galimų taškų.
- Parašykite programą kuri padėtų mokytojai apskaičiuoti testo variantų statistiką.
- Pradiniai duomenys
- Duomenys pateikti tekstiniame faile U1.txt
- Pirmoje eilutėje užrašytas testą laikiusių mokinių skaičius m (1 ≤ m ≤ 30).
- Tolesnėse eilutėse užrašyti testą laikiusių mokinių rezultatų duomenys:
- testo varianto pavadinimas (6 simboliai).
- mokinio surinkti taškai už kiekvieną užduotį.
- duomenys atskirti vienu tarpo simboliu.
- buvo bent vienas mokinys, kuris išlaikė testą.
- Rezultatai
- Rezultatus pateikite tekstiniame faile U1rez.txt
- Spausdinami kiekvieno testo varianto duomenys:
- testo varianto pavadinimas.
- testą laukiusių mokinių skaičius.
- testą išlaikiusių mokinių procentas, suapvalintas iki sveiko skaičiaus (pateikiant procento ženklą).
- didžiausias taškų skaičius, kurį surinko mokiniai.
- duomenys atskirti vienu tarpo simboliu.
- vienoje eilutėje pateikiami vieno testo varianto duomenys.
- sąrašas pateikiamas tokia eilės tvarka, kokia yra nurodyti duomenys pradiniame duomenų faile.
- Nurodymai
- Sukurkite ir parašykite vieną funkciją, kuri apskaičiuotų testo variantų statistika:
- testą laukiusių mokinių skaičių, testą išlaikiusių mokinių procentą ir didžiausią taškų skaičių, kurį surinko mokiniai.
- Duomenų ir rezultatų pavyzdžiai
- Duomenų failų pavyzdys:
- 9
- 3 var. 3 1 0 0 1 2 3 1 2 1
- 1 var. 0 0 1 2 1 0 1 1 2 3
- 4 var. 3 3 0 1 1 0 3 2 1 1
- 3 var. 1 1 0 2 2 3 3 1 2 3
- 2 var. 3 1 0 0 0 2 3 3 1 0
- 1 var. 1 3 0 3 0 1 2 0 1 3
- 3 var. 3 3 3 1 2 0 1 3 3 1
- 3 var. 2 2 1 3 2 1 2 0 2 2
- 2 var. 1 3 3 3 0 1 3 0 3 3
- Rezultatų failo pavyzdys:
- 3 var. 4 75% 20
- 1 var. 2 0% 14
- 4 var. 1 100% 15
- 2 var. 2 50% 20
- '''
- def readData():
- f = open('U1.txt', 'r')
- m = int(f.readline()) # mokiniu skaicius
- data = list()
- for i in range(m):
- data.append(f.readline().strip().split()) # tiesiog nuskaitom ir suskaldom visa eilute, kolkas nieko nekeiciam
- f.close()
- return data
- def processData(data):
- result = dict() # key = variantas, value = [mokiniu skaicius, islaike, didziausias tašku skaicius]
- for i in data:
- variantas = f'{i[0]} {i[1]}' # Sudedam pavadinima atgal, nes split atskyre skaiciu nuo "var." Tai bus musu zodyno (dict) raktas
- suma = sum(list(map(int, i[2:]))) # tašku suma
- if result.get(variantas) is None: # butinai reikia per result.get(variantas) ne per result[variantas] nes jei tokio raktas nera, get grazins None, o result[variantas] grazins KeyError (ir nucrashins programa)
- # jei tokio varianto dar nera, sukuriam nauja ir pridedam pirmaji mokini
- islaike = 1 if suma >= 15 else 0
- result[variantas] = [1, islaike, suma]
- else:
- # jei toks variantas jau yra, pridedam mokinio duomenis prie esamu
- result[variantas][0] += 1 # mokiniu skaicius +1
- result[variantas][1] += 1 if suma >= 15 else 0 # islaikiusiu skaicius +1 jei suma >= 15
- result[variantas][2] = max(result[variantas][2], suma) # didziausias tašku skaicius tarp esamo ir naujo
- return result
- def writeData(data):
- f = open('U1rez.txt', 'w')
- stringbuilder = []
- for i in data:
- # i = variantas ex: "1 var."
- # data[i][0] = mokiniu skaicius kurie laike testa
- # data[i][1] = mokiniu skaicius kurie islaikete testa. daliname is mokiniu skaiciaus ir padauginam is 100, kad gautume procentus
- # data[i][2] = didziausias tašku skaicius
- stringbuilder.append(f'{i} {data[i][0]} {round(data[i][1] / data[i][0] * 100)}% {data[i][2]}\n')
- f.write('\n'.join(stringbuilder))
- f.close()
- writeData(processData(readData()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement