diff --git a/stringCalculator.py b/stringCalculator.py index 9f0f03537e3b14b719c7dd13f0e40ab690517c1e..078714f6455c6c4bfa7ad8fd17dc3794d809f942 100644 --- a/stringCalculator.py +++ b/stringCalculator.py @@ -10,9 +10,13 @@ # 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). +# Bei der eingabe verschiedener Trennzeichen sollen trotzdem die Zahlen erkannt und zusammen addiert werden (--;\n1;2 = 3) + + import unittest from abc import ABC, abstractmethod + class IStringCalculator(ABC): @abstractmethod def add(self, numbers: str) -> int: @@ -25,14 +29,29 @@ class StringCalculator(IStringCalculator): if numbers == "": return 0 + '''Standard-Trennzeichen''' + delimiter = ";" + + '''Es wird geprüft ob ein benutzerdefiniertes Trennzeichen vorhanden ist.''' if numbers.startswith("//"): - delimiter = numbers[2:3] - numbers = numbers[4:] - list = numbers.split(delimiter) + sep = numbers.split("\n", 1) + delimiter_sep = sep[0][2:] + + '''Für den Fall, dass das Trennzeichen in eckigen Klammern steht werden die Klammern entfernt und das Trennzeichen gespeichert''' + if delimiter_sep.startswith("[") and delimiter_sep.endswith("]"): + delimiter = delimiter_sep[1:-1] - else: - '''Zahlen werden aufgeteilt''' - list = numbers.replace("\n", ",").split(",") + else: + delimiter = delimiter_sep[0] + + '''Entfernen der ersten Zeile, damit nur noch Zahlen übrig bleiben''' + numbers = sep[1] + + '''Ersetzen von Zeilenumbrüchen mit Delimiter und ersetzen von Delimiter durch ",", um splitten zu können''' + numbers = numbers.replace("\n", delimiter).replace(delimiter, ",") + + list = numbers.split(",") + result = 0 result = 0 for num in list: @@ -106,6 +125,9 @@ class TestStringCalculator(unittest.TestCase): res = self.c.add("2, 1001") self.assertEqual(res, 2) + def test_multidelimiter(self): + res = self.c.add("//[***]\n1***2***3") + self.assertEqual(res, 6) if __name__ == "__main__": unittest.main() \ No newline at end of file