From f11ce06db6dc339b76ce46e395895a32ef3d0627 Mon Sep 17 00:00:00 2001 From: DaniRafeh28 <daniel.rafeh@student.reutlingen-university.de> Date: Tue, 25 Mar 2025 18:18:03 +0100 Subject: [PATCH] test successful --- stringCalculator.py | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 stringCalculator.py diff --git a/stringCalculator.py b/stringCalculator.py new file mode 100644 index 0000000..9f0f035 --- /dev/null +++ b/stringCalculator.py @@ -0,0 +1,111 @@ +# Bei einer leeren Eingabe "" soll die Zahl 0 ausgegeben werden. +# Bei der Eingabe "1" soll die 1 ausgegeben werden. +# Bei der Eingabe von 2 Zahlen als Strings separiert durch "," (z.B. "1, 2") soll die Zahl 3 ausgegeben werden +# Bei der Eingabe "0, 5" soll die Zahl 5 ausgegeben werden. +# Bei der Eingabe von 3 Zahlen (z.B. 1,2,3) soll "only two numbers allowed" ausgegeben werden. --rausgenommen weil kein Gebrauch! +# Bei der Eingabe von Float-Werten z.B. 3.5 soll "only integers allowed" ausgegeben werden. +# Bei der Eingabe von Buchstaben z.B. 1, z soll "only integers allowed" ausgegeben werden. +# Bei der Eingabe von 2 Zahlen als Strings separiert durch "\n" (z.B. "1\n2,3") soll 6 ausgegeben werden +# Bei der Eingabe von negativen Zahlen (z.B. -3) soll "negatives not allowed" ausgegeben werden +# Bei der Eingabe von Zahlen mit einem benutzerdefinierten Trennzeichen soll die Summe der Zahlen berechnet werden (z.B. //;\n1;2 = 3) +# Bei Eingabe von Zahlen >1000 sollen diese ignoriert werden (z.B. 2 + 1001 = 2) +# Bei der Eingabe von Zahlen mit einem benutzerdefinierten Trennzeichen soll die Summe der Zahlen berechnet werden. Trennzeichen können unbegrenzt lang sein (z.B. “//[***]\n1***2***3†= 6). +import unittest +from abc import ABC, abstractmethod + +class IStringCalculator(ABC): + @abstractmethod + def add(self, numbers: str) -> int: + pass + +class StringCalculator(IStringCalculator): + def add(self, numbers: str) -> int: + + '''Leere Eingabe soll 0 ausgeben''' + if numbers == "": + return 0 + + if numbers.startswith("//"): + delimiter = numbers[2:3] + numbers = numbers[4:] + list = numbers.split(delimiter) + + else: + '''Zahlen werden aufgeteilt''' + list = numbers.replace("\n", ",").split(",") + + result = 0 + for num in list: + num = num.strip() + if num == "": + continue + + '''Sicherstellen dass Floats nicht berücksichtigt werden''' + if "." in num: + return "only integers allowed" + + '''Sicherstellen, dass keine Buchstaben verwendet werden dürfen''' + try: + number = int(num) + except ValueError: + return "only integers allowed" + + '''Konvertirung von Strings zu Integer''' + if number < 0: + return "negatives not allowed" + + if number > 1000: + continue + + result += number + + return result + + +class TestStringCalculator(unittest.TestCase): + def setUp(self): + self.c = StringCalculator() + + def test_empty(self): + res = self.c.add("") + self.assertEqual(res, 0) + + def test_oneNumber(self): + res = self.c.add("1") + self.assertEqual(res, 1) + + def test_addingTwoNumbers(self): + res = self.c.add("1,2") + self.assertEqual(res, 3) + + def test_addingTwoNumbersWithZero(self): + res = self.c.add("0,5") + self.assertEqual(res, 5) + + def test_handleFloat(self): + res = self.c.add("3.5") + self.assertEqual(res, "only integers allowed") + + def test_handleLetter(self): + res = self.c.add("1, z") + self.assertEqual(res, "only integers allowed") + + def test_addWithBackslashN(self): + res = self.c.add("1\n2,3") + self.assertEqual(res, 6) + + def test_negativeValues(self): + res = self.c.add("-3") + self.assertEqual(res, "negatives not allowed") + + def test_delimiter(self): + res = self.c.add("//;\n1;2") + self.assertEqual(res, 3) + + def test_thousandone(self): + res = self.c.add("2, 1001") + self.assertEqual(res, 2) + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file -- GitLab