Hong-Phuc Bui
2024-06-19 1cce8fe30a73f538ed63e88d7c09e18456d333b9
test
4 files modified
1 files added
131 ■■■■ changed files
study-effort/pyproject.toml 2 ●●●●● patch | view | raw | blame | history
study-effort/src/mystudy/lecture.py 51 ●●●● patch | view | raw | blame | history
study-effort/src/mystudy/main.py 25 ●●●●● patch | view | raw | blame | history
study-effort/tests/mystudy/lecture_test.py 50 ●●●● patch | view | raw | blame | history
study-effort/vorlesung.csv 3 ●●●●● patch | view | raw | blame | history
study-effort/pyproject.toml
@@ -10,8 +10,6 @@
# All the following settings are optional:
where = ["src"]
[project.scripts]
mystudy = "mystudy.main:main"
study-effort/src/mystudy/lecture.py
@@ -4,19 +4,48 @@
ects_effort: Final[int] = 30
def lecture_effort(lecture_pre_week, ects):
    """
    :param lecture_pre_week: wie viel Veranstaltungen hat eine Vorlesung in der Woche
    :param ects: Anzahl der ECTS der Vorlesung
    :return:
    """
    effort_in_time = ects * ects_effort
    effort_per_week = effort_in_time / lecture_time # how many hours for a week
    return effort_per_week - (lecture_pre_week * 1.5)
class Lecture():
    def __init__(self, name, ects, frequency):
        """
        :param name:
        :param ects:
        :param frequency:
        """
        self._name = name
        self._ects = ects
        self._frequency = frequency
    def cal_effort(self, time_per_ects = ects_effort, duration = lecture_time) -> float:
        """
        Berechnet den Zeitaufwand pro woche für diese Vorlesung
        :param time_per_ects:
        :param duration:
        :return:
        """
        effort_in_time = self._ects * time_per_ects
        effort_per_week = effort_in_time / duration
        return effort_per_week - (self._frequency * 1.5)
    def __repr__(self):
        return f"Vorlesungsname {self._name} ECTS: {self._ects}"
    # def __str__(self):
    #    return self.__repr__()
def format_lecture_effort(name, lecture_count, ects, effort):
    return f"Für die Vorlesung {name} mit {ects} ECTS und {lecture_count} Veranstaltung pro Woche brauchen Sie {effort} Stunden zu lernen."
def parse_lecture_line(line: str) -> Lecture:
    words = line.split(";")
    words = [w.strip() for w in words]
    name = words[0]
    count = float(words[1])
    ects = int(words[2])
    return Lecture(name, ects, count)
    pass
study-effort/src/mystudy/main.py
@@ -1,12 +1,21 @@
from mystudy import lecture
from mystudy.lecture import Lecture, parse_lecture_line
from sys import argv
lecture_count = input("Geben Sie die Anzahl der Veranstaltungen ein!")
lecture_per_week = int(lecture_count)
ects_input = input("Geben Sie die ECTS-Zahl der Vorlesung ein!")
ects = int(ects_input)
def read_file_to_lecture(filename: str) -> list[Lecture]:
    lectures = []
    with open(filename, 'r') as file:
        while line := file.readline():
            if len(line.strip()) > 0:
                l = parse_lecture_line(line)
                lectures.append(l)
    return lectures
effort = lecture.lecture_effort(lecture_per_week, ects)
text = lecture.format_lecture_effort("Mathematik", lecture_per_week, ects, effort)
print(text)
def main():
    filename = argv[1]
    print(filename)
    lectures = read_file_to_lecture(filename)
    for l in lectures:
        print(l)
study-effort/tests/mystudy/lecture_test.py
@@ -1,22 +1,42 @@
import unittest
from mystudy import lecture
from mystudy.lecture import Lecture, parse_lecture_line
EPSILON = 0.01
class LectureTestCase(unittest.TestCase):
    def test_constructor(self):
        n = "Mathematik"
        ects = 5
        f = 2.5
        mathe2 = Lecture(n, ects, f)
        english = Lecture("English", 2, 1)
        print(mathe2)
        print(english)
        text = f"{mathe2} am Montag"
        text2 = f"{mathe2} im Studiengang MAM"
        print(text)
class MyTestCase(unittest.TestCase):
    def test_something(self):
        ects_python = 2
        lecture_per_week = 2
        effort_per_week = lecture.lecture_effort(lecture_per_week, ects_python)
        self.assertEqual(effort_per_week, 1.0)  # add assertion here
    def test_cal_effort(self):
        n = "Mathematik",
        ects = 5
        f = 2.5
        mathe2 = Lecture(n, ects, f)
        e1 = mathe2.cal_effort()
        # self.assertEqual(e1, 6)
        diff = abs(e1 - 6.25)
        self.assertTrue(diff < EPSILON)
    def test_format(self):
        ects = 3
        lecture_per_week = 2
        name = "Informatik"
        text = lecture.format_lecture_effort(name, lecture_per_week, ects, 8)
        self.assertTrue(text.index(f"{ects}") >= 0)
        self.assertTrue(text.index(name) >= 0)
        self.assertTrue(text.index("8"))
        e2 = mathe2.cal_effort(time_per_ects=20)
        diff = abs(e2 - 2.92)
        # self.assertEqual(e2, 7)
        self.assertTrue(diff < EPSILON)
    def test_parse_lecture_line(self):
        data = "English; 3; 2"
        english = parse_lecture_line(data)
        text = "Vorlesungsname English ECTS: 2"
        self.assertEqual(text, f"{english}")
if __name__ == '__main__':
study-effort/vorlesung.csv
New file
@@ -0,0 +1,3 @@
Mathematik; 2.5; 5
Prog-2    ; 2  ; 5