Advertisement
xTheEc0

IT VBE 2023 Pakartotinis Uzduotis 1 Python

Jul 8th, 2023
1,428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.06 KB | None | 0 0
  1. '''
  2. Informacinių technologijų mokytoja Giedrė sugalvojo penkių variantų žinių patikrinamuosius testus mokiniams.
  3. Kiekvieną testą sudaro 10 klausimų, vertinamų taškais nuo 0 iki 3.
  4. Testas yra išlaikytas, jeigu mokinys surinko ne mažiau kaip pusę galimų taškų.
  5.  
  6. Parašykite programą kuri padėtų mokytojai apskaičiuoti testo variantų statistiką.
  7.  
  8. Pradiniai duomenys
  9.    Duomenys pateikti tekstiniame faile U1.txt
  10.    Pirmoje eilutėje užrašytas testą laikiusių mokinių skaičius m (1 ≤ m ≤ 30).
  11.    Tolesnėse eilutėse užrašyti testą laikiusių mokinių rezultatų duomenys:
  12.        testo varianto pavadinimas (6 simboliai).
  13.        mokinio surinkti taškai už kiekvieną užduotį.
  14.        duomenys atskirti vienu tarpo simboliu.
  15.        buvo bent vienas mokinys, kuris išlaikė testą.
  16.  
  17. Rezultatai
  18.    Rezultatus pateikite tekstiniame faile U1rez.txt
  19.    Spausdinami kiekvieno testo varianto duomenys:
  20.        testo varianto pavadinimas.
  21.        testą laukiusių mokinių skaičius.
  22.        testą išlaikiusių mokinių procentas, suapvalintas iki sveiko skaičiaus (pateikiant procento ženklą).
  23.        didžiausias taškų skaičius, kurį surinko mokiniai.
  24.        duomenys atskirti vienu tarpo simboliu.
  25.        vienoje eilutėje pateikiami vieno testo varianto duomenys.
  26.        sąrašas pateikiamas tokia eilės tvarka, kokia yra nurodyti duomenys pradiniame duomenų faile.
  27.  
  28. Nurodymai
  29.    Sukurkite ir parašykite vieną funkciją, kuri apskaičiuotų testo variantų statistika:
  30.        testą laukiusių mokinių skaičių, testą išlaikiusių mokinių procentą ir didžiausią taškų skaičių, kurį surinko mokiniai.
  31.  
  32. Duomenų ir rezultatų pavyzdžiai
  33. Duomenų failų pavyzdys:
  34. 9
  35. 3 var. 3 1 0 0 1 2 3 1 2 1
  36. 1 var. 0 0 1 2 1 0 1 1 2 3
  37. 4 var. 3 3 0 1 1 0 3 2 1 1
  38. 3 var. 1 1 0 2 2 3 3 1 2 3
  39. 2 var. 3 1 0 0 0 2 3 3 1 0
  40. 1 var. 1 3 0 3 0 1 2 0 1 3
  41. 3 var. 3 3 3 1 2 0 1 3 3 1
  42. 3 var. 2 2 1 3 2 1 2 0 2 2
  43. 2 var. 1 3 3 3 0 1 3 0 3 3
  44.  
  45. Rezultatų failo pavyzdys:
  46. 3 var. 4 75% 20
  47. 1 var. 2 0% 14
  48. 4 var. 1 100% 15
  49. 2 var. 2 50% 20
  50. '''
  51.  
  52. def readData():
  53.     f = open('U1.txt', 'r')
  54.     m = int(f.readline()) # mokiniu skaicius
  55.     data = list()
  56.     for i in range(m):
  57.         data.append(f.readline().strip().split()) # tiesiog nuskaitom ir suskaldom visa eilute, kolkas nieko nekeiciam
  58.     f.close()
  59.     return data
  60.  
  61.  
  62. def processData(data):
  63.     result = dict() # key = variantas, value = [mokiniu skaicius, islaike, didziausias tašku skaicius]
  64.     for i in data:
  65.         variantas = f'{i[0]} {i[1]}' # Sudedam pavadinima atgal, nes split atskyre skaiciu nuo "var." Tai bus musu zodyno (dict) raktas
  66.         suma = sum(list(map(int, i[2:]))) # tašku suma
  67.  
  68.         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)
  69.             # jei tokio varianto dar nera, sukuriam nauja ir pridedam pirmaji mokini
  70.             islaike = 1 if suma >= 15 else 0
  71.             result[variantas] = [1, islaike, suma]
  72.         else:
  73.             # jei toks variantas jau yra, pridedam mokinio duomenis prie esamu
  74.             result[variantas][0] += 1 # mokiniu skaicius +1
  75.             result[variantas][1] += 1 if suma >= 15 else 0 # islaikiusiu skaicius +1 jei suma >= 15
  76.             result[variantas][2] = max(result[variantas][2], suma) # didziausias tašku skaicius tarp esamo ir naujo
  77.  
  78.     return result
  79.  
  80.  
  81. def writeData(data):
  82.     f = open('U1rez.txt', 'w')
  83.     stringbuilder = []
  84.     for i in data:
  85.         # i = variantas ex: "1 var."
  86.         # data[i][0] = mokiniu skaicius kurie laike testa
  87.         # data[i][1] = mokiniu skaicius kurie islaikete testa. daliname is mokiniu skaiciaus ir padauginam is 100, kad gautume procentus
  88.         # data[i][2] = didziausias tašku skaicius
  89.         stringbuilder.append(f'{i} {data[i][0]} {round(data[i][1] / data[i][0] * 100)}% {data[i][2]}\n')
  90.     f.write('\n'.join(stringbuilder))
  91.     f.close()
  92.    
  93.  
  94. writeData(processData(readData()))
  95.  
Tags: python LT IT VBE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement