import re import unittest def Telefonnummer(nummer): #nur noch Zahlen nummer = re.sub(r"[^\d]", "", nummer) #1 am Start if not nummer.startswith("1"): nummer = "1" + nummer #Bindestriche nummer = re.sub(r"(\d{1})(\d{3})(\d{3})(\d{4})", r"1-\2-\3-\4", nummer) return nummer #a) def Gültigkeit(nummer): match = re.search(r"(1)-([0-9]+)-([0-9]+)-([0-9]+)", Telefonnummer(nummer)) if match: ortsvorwahl = match.group(2) amtskennziffer = match.group(3) vorwahl = match.group(4) if ortsvorwahl[0] == "0" or ortsvorwahl[0] == "1": raise ValueError("Ungültige Telefonnummer (erste Ortsvorwahlziffer darf nicht 0 oder 1 sein)") elif vorwahl[0] == "0" or vorwahl[0] == "1": raise ValueError("Ungültige Telefonnummer (erste Vorwahlziffer darf nicht 0 oder 1 sein)") elif vorwahl[1] == "9": raise ValueError("Ungültige Telefonnummer (zweite Vorwahlziffer darf nicht 9 sein)") elif len(ortsvorwahl) != 3 or len(amtskennziffer) != 3 or len(vorwahl) != 4: raise ValueError("Ungültige Telefonnummer (zu lang)") return Telefonnummer(nummer) else: raise ValueError("Ungültige Telefonnummer (falsches Format)") #b) class Testnummern(unittest.TestCase): def setUp(self): self.test_nummern = ["+1 223-456-7890", "1-223-456-7890", "+1 223 456-7890", "(223) 456-7890", "1 223 456 7890", "223.456.7890", "1-989-111-2222"] def testnummern(self): expected_outputs = ["1-223-456-7890", "1-223-456-7890", "1-223-456-7890", "1-223-456-7890", "1-223-456-7890", "1-223-456-7890", "1-989-111-2222"] for i, number in enumerate(self.test_nummern): try: result = Gültigkeit(number) self.assertEqual(result, expected_outputs[i]) except ValueError as e: self.assertRaises(ValueError) if __name__ == '__main__': unittest.main()