diff --git a/__pycache__/calculator.cpython-312.pyc b/__pycache__/calculator.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0c79c8eed669ab1f2545621177cf866fa57d22f5
Binary files /dev/null and b/__pycache__/calculator.cpython-312.pyc differ
diff --git a/calculator.py b/calculator.py
new file mode 100644
index 0000000000000000000000000000000000000000..1a0959ccc2817bea126f1ee090960c60bcfab61b
--- /dev/null
+++ b/calculator.py
@@ -0,0 +1,66 @@
+from abc import ABC, abstractmethod
+import unittest
+
+class ICalculator(ABC):
+    @abstractmethod
+    def add(self, a, b):
+        pass
+
+    @abstractmethod
+    def sub(self, a, b):
+        pass
+
+    @abstractmethod
+    def mul(self, a, b):
+        pass
+
+    @abstractmethod
+    def div(self, a, b):
+        pass
+
+class Calculator(ICalculator):
+    def add(self, a, b):
+        return a + b
+
+    def sub(self, a, b):
+        return a - b
+
+    def mul(self, a, b):
+        return a * b
+
+    def div(self, a, b):
+        if b == 0:
+            raise ValueError("Division durch die Zahl null ist nicht erlaubt")
+        return a / b
+
+class TestCalculator(unittest.TestCase):
+    def setUp(self):
+        self.calc = Calculator() 
+
+    # Test add-function
+    def test_add(self):
+        erg = self.calc.add(3, 5) 
+        self.assertEqual(erg, 8)
+
+    # Test sub-function
+    def test_sub(self):
+        erg = self.calc.sub(10, 3)
+        self.assertEqual(erg, 7)
+
+    # Test mul-function
+    def test_mul(self):
+        erg = self.calc.mul(4, 6)  
+        self.assertEqual(erg, 24)
+
+    # Test div-function
+    def test_div(self):
+        erg = self.calc.div(20, 4) 
+        self.assertEqual(erg, 5)
+
+    # Test div/0
+    def test_div_by_zero(self):
+        with self.assertRaises(ValueError):
+            self.calc.div(10, 0) 
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/converter.py b/converter.py
new file mode 100644
index 0000000000000000000000000000000000000000..39548efeaea05889ef9d6b551023ff48cd39179d
--- /dev/null
+++ b/converter.py
@@ -0,0 +1,33 @@
+# Bei Eingabe der Zahl 1 soll "I" ausgegeben werden
+
+# Bei Eingabe der Zahl 2 soll "II" ausgegeben werden
+
+# Bei Eingabe der Zahl 3 soll "III" ausgegeben werden
+
+# Bei Eingabe der Zahl 4 soll "IV" ausgegeben werden
+
+# Bei Eingabe der Zahl 5 soll "V" ausgegeben werden
+
+# Bei Eingabe der Zahl 9 soll "IX" ausgegeben werden
+
+# Bei Eingabe der Zahl 10 soll "X" ausgegeben werden
+
+# Bei Eingabe der Zahl 21 soll "XXI" ausgegeben werden
+
+# Bei Eingabe der Zahl 50 soll "L" ausgegeben werden
+
+# Bei Eingabe der Zahl 100 soll "C" ausgegeben werden
+
+# Bei Eingabe der Zahl 500 soll "D" ausgegeben werden
+
+# Bei Eingabe der Zahl 1000 soll "M" ausgegeben werden
+
+# Bei Eingabe der Zahl 1111 soll "MCXI" ausgegeben werden
+
+# Bei Eingabe der Zahl 99 soll "XCIX" ausgegeben werden
+
+# Bei Eingabe der Zahl 0 soll "Es gibt keine römische Null" ausgegeben werden
+
+# Bei Eingabe der Zahl 40 soll "XL" ausgegeben werden
+
+# Bei Eingabe eines Strings statt Integer-Wert soll "Gebe eine Zahl ein" ausgegeben werden
\ No newline at end of file
diff --git a/counter.py b/counter.py
new file mode 100644
index 0000000000000000000000000000000000000000..2126ece1eae74cb5a00151852049b093f1e037e4
--- /dev/null
+++ b/counter.py
@@ -0,0 +1,55 @@
+from abc import ABC, abstractmethod
+import unittest
+
+# Bei Eingabe des Strings Decker liegert die Funktion 3
+
+# Bei Eingabe eines leeren Strings soll 0 ausgegeben werden
+
+# Bei Eingabe des Strings Hallo soll 0 ausgegeben werden
+
+# Bei Eingabe von Groß-/Kleinschreibung soll trotzdem der entsprechende Wert rauskommen
+
+# Bei Eingabe vom Buchstaben D oder E soll trotzdem die 1 rauskommen
+
+class ICounter(ABC):
+    @abstractmethod
+    def count_ED(self, s):
+        pass
+
+class Counter(ICounter):
+    def count_ED(self, s):
+        s = s.upper()
+        return s.count("E") + s.count("D")
+
+class TestCounter(unittest.TestCase):
+    def setUp(self):
+        self.c = Counter()
+
+    def test_count_ED_regular(self):
+        res = self.c.count_ED("Decker")
+        self.assertEqual(res, 3)
+
+    def test_count_ED_empty(self):
+        res = self.c.count_ED(" ")
+        self.assertEqual(res, 0)
+
+    def test_count_ED_wo(self):
+        res = self.c.count_ED("Hallo")
+        self.assertEqual(res, 0)
+
+    def test_count_ED_insensetiv(self):
+        res = self.c.count_ED("Der Esel")
+        self.assertEqual(res, 4)
+
+    def test_count_ED_oneL(self):
+        res = self.c.count_ED('E')
+        self.assertEqual(res, 1)
+        res = self.c.count_ED('D')
+        self.assertEqual(res, 1)
+        res = self.c.count_ED('e')
+        self.assertEqual(res, 1)
+        res = self.c.count_ED('d')
+        self.assertEqual(res, 1)
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/test_calculator.py b/test_calculator.py
new file mode 100644
index 0000000000000000000000000000000000000000..0ecaa8bd747ea51031fb1bf3f37560a435ea0822
--- /dev/null
+++ b/test_calculator.py
@@ -0,0 +1,38 @@
+import sys
+import unittest
+from calculator import Calculator
+
+class TestCalculator(unittest.TestCase):
+
+    def setUp(self):
+        self.c = Calculator()
+
+    # Test add-function
+    def test_add(self):
+        erg = self.c.add(3, 5)
+        self.assertEqual(erg, 8)
+
+    # Test sub-function
+    def test_sub(self):
+        erg = self.c.sub(10, 3)
+        self.assertEqual(erg, 7)
+
+    # Test mul-function
+    def test_mul(self):
+        erg = self.c.mul(4, 6)
+        self.assertEqual(erg, 24)
+
+    # Test div-function
+    def test_div(self):
+        erg = self.c.div(20, 4)
+        self.assertEqual(erg, 5)
+
+    # Test div/0
+    def test_div_by_zero(self):
+        with self.assertRaises(ValueError):
+            self.c.div(10, 0)
+    
+    # Test negative numbers
+
+    # Test wrong inputs
+