#! /usr/bin/evn python
|
|
"""
|
Programm zum Berechnen den Aufwand für das Selbststudium pro Woche in einem Semester.
|
|
Das Semester hat 15 Woche.
|
Eine Doppelstunde (DS) entspricht 90 Minuten. Ein ECTS entspricht einen Aufwand von 30 Stunden.
|
Eine Veranstaltung (Vorlesung, Übung, Tutorium) ist 2 DS.
|
Die Vorlesungen in einem Semester werden in einer Text-Datei erfasst. Ein Template ist wie folgt:
|
|
```txt
|
#Name; ECTS; Veranstaltung pro Woche
|
Programmierung 2; 5; 2
|
Mathematik 2; 5; 3
|
```
|
|
Usage:
|
|
$python effort_semester.py Vorlesungen.txt
|
Vorlesung ECTS V-Ü-T/Woche Selbstudiumszeit pro Woche
|
Programmierung 2 5 2 <>
|
Mathematik 2 5 3 <>
|
--------------------------------------------------------------------------------
|
<>
|
"""
|
import sys
|
from typing import Final
|
|
SEMESTER_LENGTH: Final[int] = 15 # 15 Woche pro Semester
|
ECTS_EFFORT = 30 # 1 ECTS ~ 30 h
|
DS = 1.5 # DS = Doppelstunde = 2 Unterrichtstunden
|
|
|
def parse_line(line: str) -> tuple[str, float, float]:
|
line = line.strip()
|
line = [e.strip() for e in line.split(";")]
|
return line[0], float(line[1]), float(line[2])
|
|
|
def collect_lectures_from_file(lecture_filename:str) -> list[tuple[str, float, float]]:
|
# Your code here
|
lectures = []
|
with open(lecture_filename) as file:
|
while line := file.readline():
|
line = line.strip()
|
if line[0] != '#':
|
line = parse_line(line)
|
lectures.append( line )
|
return lectures
|
|
|
def lecture_effort(lecture: tuple[str, float, float]) -> float:
|
sum_effort = lecture[1] * ECTS_EFFORT
|
lecture_effort = SEMESTER_LENGTH * (lecture[2] * DS)
|
return (sum_effort - lecture_effort) / SEMESTER_LENGTH
|
|
|
def compute_semester_effort(lectures: list[tuple[str, float, float]]) -> list[tuple[str, float, float, float]]:
|
effort = [
|
(e[0], e[1], e[2], lecture_effort(e)) for e in lectures
|
]
|
return effort
|
|
|
def print_effort(effort: list[tuple[str, float, float, float]]) -> None:
|
max_char = 0
|
sep_width = 3
|
sum_effort = 0
|
for l in effort:
|
if l := len(l[0]) > max_char:
|
max_char = l
|
sum_effort += l[-1]
|
|
lecture_col_width = sep_width + max_char
|
ects_width = len("ECTS") + 1
|
veranstaltung_col_width = 5
|
header = ("Vorlesung", "ECTS", "V;U;T/Woche", "Aufwand/Woche")
|
for l in effort:
|
lecture = l[0].rjust(lecture_col_width)
|
ects = f"{l[1]}".ljust(ects_width)
|
v = f"{l[2]}".rjust(veranstaltung_col_width)
|
e = f"{l[3]}".rjust(veranstaltung_col_width)
|
print(f"{lecture} {ects} {v} {e}")
|
print(f"Summe: {sum_effort}")
|
|
|
if __name__ == "__main__":
|
lecture_filename = sys.argv[1]
|
lectures = collect_lectures_from_file(lecture_filename)
|
print(lectures)
|
effort = compute_semester_effort(lectures)
|
#print(effort)
|
print_effort(effort)
|