Hong-Phuc Bui
2024-05-15 7df20ac74520ea7cbb38152e14f8bc4e8fb125e5
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)