da bei mir bald die Noten verkündet werden und ich mir vor langer Zeit schon mal eine Excel-Tabelle gebastelt habe, um meinen Abiturnotenschnitt zu berechnen, habe ich mir ein Python-Skript geschrieben, um wieder reinzukommen.
Ich habe Python 3.x verwendet.
Die Formelelemente stammen aus der AVO GOBAK Niedersachsen: http://www.mk.niedersachsen.de/download ... .2014_.pdf für das Berufliche Gymnasium Technik
Doch hier zuerst der Python-Code:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
import csv
ALEVEL_FACTOR = 2
EXAM_FACTOR = 4
POINTS_MULTIPLIER = 40
POINTS_DIVIDER = 48
def readSemesterGrades(filename):
points = 0
with open(filename, 'r') as grades:
reader = csv.reader(grades)
for semester in reader:
semester_grades = semester[0].split(';')
for index, grade in enumerate(semester_grades):
try:
if index <= 2:
# First three are the a-level courses
points += int(grade) * ALEVEL_FACTOR
else:
points += int(grade)
except ValueError as error:
print('One of the grades isn\'t a number: {}'.format(error))
return points
def readExamGrades():
points = 0
for gradeIndex in range(2, 7):
points += int(sys.argv[gradeIndex])
return points
def calculateAverageGrade(points):
return (17/3) - (points/180)
def main():
#### Block 1 ###
filename = sys.argv[1]
points_block1 = readSemesterGrades(filename)
# Multiply with factor from AVO GOBAK
points_block1 *= POINTS_MULTIPLIER
# Divide by divider from AVO GOBAK
points_block1 = round(points_block1 / POINTS_DIVIDER, 0)
#### Block 2 ####
# Factor found in AVO GOBAK
points_block2 = readExamGrades() * EXAM_FACTOR
#### Sum and Average ####
points_sum = points_block1 + points_block2
average_grade = calculateAverageGrade(points_sum)
#### Print results ####
print(30 * '=')
print('Points in Block 1: {}'.format(int(points_block1)))
print('Points in Block 2: {}'.format(points_block2))
print('Sum (Block1 + Block2): {}'.format(int(points_sum)))
print(30 * '=')
print('Average grade: {}'.format(round(average_grade, 2)))
if __name__ == "__main__":
try:
main()
except (FileNotFoundError, IndexError):
script_name = os.path.basename(sys.argv[0])
print('Usage:')
print('./{} grades.csv exam_grade_p1 exam_grade_p2 exam_grade_p3 ' \
'exam_grade_p4 exam_grade_p5'.format(script_name))
print()
print('Example:')
print('./{} grades.csv 12 13 10 12 9'.format(script_name))
Code: Alles auswählen
P1;P2;P3;P4;P5;G1;G2;G3;G4
Als Argumente erwartet das Skript folgende:
Code: Alles auswählen
~$ ./abinoten.py noten.csv Prüfungsnote_P1 Prüfungsnote_P2 .. Prüfungsnote_P5
Das Skript ist sicherlich verbesserungswürdig. Ich freue mich über Verbesserungsvorschläge. Die Formel für den Durchschnitt habe ich extra in eine Funktion verpackt, um sie durch den Code zu erklären. Ein Kommentar hätte genauso funktioniert.
Liebe Grüße,
Maik