Hong-Phuc Bui
2024-05-15 7df20ac74520ea7cbb38152e14f8bc4e8fb125e5
Ende Vorlesung 15.5.
4 files modified
62 ■■■■ changed files
.gitignore 3 ●●●●● patch | view | raw | blame | history
funktion-modular/study-effort/README.md 3 ●●●● patch | view | raw | blame | history
funktion-modular/study-effort/Vorlesungen.txt 4 ●●● patch | view | raw | blame | history
funktion-modular/study-effort/effort_semester.py 52 ●●●●● patch | view | raw | blame | history
.gitignore
@@ -1,3 +1,6 @@
sandbox*
queens*
*.venv*
    |test|
funktion-modular/study-effort/README.md
@@ -4,7 +4,7 @@
2. In der Ordner legen Sie die Datei `Vorlesungen.txt` mit folgenden Inhalt an:
```text
#Name; ECTS; Veranstaltung pro Woche
#Name; ECTS; Veranstaltungen pro Woche
Programmierung 2; 5; 2
Mathematik 2; 5; 3
```
@@ -27,6 +27,7 @@
Sie können folgenden Funktionen benutzen:
* String Verarbeitung
    * `str.split()`
    * `str.ljust()`
    * `str.rjust()`
* Datei-Handling
funktion-modular/study-effort/Vorlesungen.txt
@@ -1,3 +1,5 @@
#Name; ECTS; Veranstaltung pro Woche
#Vorlesung; ECTS; Veranstaltung
Programmierung 2; 5; 2
Mathematik 2; 5; 3
# Wahlfach
Design Pattern in Software; 5; 2
funktion-modular/study-effort/effort_semester.py
@@ -27,27 +27,69 @@
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
    pass
    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]]:
    # Your code here
    pass
    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:
    # Your code here
    pass
    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)