1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Aufbau der Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Grundgerüst des PyCharm-Projekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Grundgerüst für die Unit Tests mit PyTest . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Anmerkung zum Programmierstil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Anmerkung zu den Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Ausprobieren der Beispiele und Lösungen . . . . . . . . . . . . . . . . . . . . . . . 9
I Grundlagen 11
2 Mathematische Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1 Römische Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.2 Zahlenspielereien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1 Aufgabe 1: Grundrechenarten (?????) . . . . . . . . . . . . . . . . . 21
2.2.2 Aufgabe 2: Zahl als Text (?????) . . . . . . . . . . . . . . . . . . . . . . 22
2.2.3 Aufgabe 3: Vollkommene Zahlen (?????) . . . . . . . . . . . . . . . 22
2.2.4 Aufgabe 4: Primzahlen (?????) . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.5 Aufgabe 5: Primzahlpaare (?????). . . . . . . . . . . . . . . . . . . . . 23
2.2.6 Aufgabe 6: Prüfsumme (?????) . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.7 Aufgabe 7: Römische Zahlen (?????) . . . . . . . . . . . . . . . . . . 24
2.2.8 Aufgabe 8: Kombinatorik (?????) . . . . . . . . . . . . . . . . . . . . . . 24
2.2.9 Aufgabe 9: Armstrong-Zahlen (?????) . . . . . . . . . . . . . . . . . 25
2.2.10 Aufgabe 10: Max Change Calculator (?????) . . . . . . . . . . . 25
2.2.11 Aufgabe 11: Befreundete Zahlen (?????) . . . . . . . . . . . . . . . 26
2.2.12 Aufgabe 12: Primfaktorzerlegung (?????) . . . . . . . . . . . . . . 26
2.3 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.1 Lösung 1: Grundrechenarten (?????) . . . . . . . . . . . . . . . . . . 27
2.3.2 Lösung 2: Zahl als Text (?????) . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.3 Lösung 3: Vollkommene Zahlen (?????) . . . . . . . . . . . . . . . . 31
2.3.4 Lösung 4: Primzahlen (?????) . . . . . . . . . . . . . . . . . . . . . . . . 33
viii Inhaltsverzeichnis
2.3.5 Lösung 5: Primzahlpaare (?????) . . . . . . . . . . . . . . . . . . . . . 35
2.3.6 Lösung 6: Prüfsumme (?????) . . . . . . . . . . . . . . . . . . . . . . . . 39
2.3.7 Lösung 7: Römische Zahlen (?????) . . . . . . . . . . . . . . . . . . . 40
2.3.8 Lösung 8: Kombinatorik (?????) . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.9 Lösung 9: Armstrong-Zahlen (?????) . . . . . . . . . . . . . . . . . . 46
2.3.10 Lösung 10: Max Change Calculator (?????) . . . . . . . . . . . . 49
2.3.11 Lösung 11: Befreundete Zahlen (?????) . . . . . . . . . . . . . . . . 50
2.3.12 Lösung 12: Primfaktorzerlegung (?????) . . . . . . . . . . . . . . . 52
3 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.1.1 Mathematische Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.1.2 Algorithmische Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.1.3 Typische Probleme: Endlose Aufrufe und RecursionError 64
3.2 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2.1 Aufgabe 1: Fibonacci (?????) . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2.2 Aufgabe 2: Ziffern verarbeiten (?????) . . . . . . . . . . . . . . . . . 66
3.2.3 Aufgabe 3: ggT / GCD (?????) . . . . . . . . . . . . . . . . . . . . . . . . 67
3.2.4 Aufgabe 4: Reverse String (?????) . . . . . . . . . . . . . . . . . . . . 68
3.2.5 Aufgabe 5: Array Sum (?????) . . . . . . . . . . . . . . . . . . . . . . . . 68
3.2.6 Aufgabe 6: Array Min (?????) . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.2.7 Aufgabe 7: Konvertierungen (?????) . . . . . . . . . . . . . . . . . . . 69
3.2.8 Aufgabe 8: Exponentialfunktion (?????) . . . . . . . . . . . . . . . . 70
3.2.9 Aufgabe 9: Pascal’sches Dreieck (?????) . . . . . . . . . . . . . . . 71
3.2.10 Aufgabe 10: Zahlenpalindrome (?????) . . . . . . . . . . . . . . . . 71
3.2.11 Aufgabe 11: Permutationen (?????) . . . . . . . . . . . . . . . . . . . 72
3.2.12 Aufgabe 12: Count Substrings (?????) . . . . . . . . . . . . . . . . . 72
3.2.13 Aufgabe 13: Lineal (?????) . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.3 Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3.1 Lösung 1: Fibonacci (?????) . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.3.2 Lösung 2: Ziffern verarbeiten (?????) . . . . . . . . . . . . . . . . . . 76
3.3.3 Lösung 3: ggT / GCD (?????) . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.3.4 Lösung 4: Reverse String (?????) . . . . . . . . . . . . . . . . . . . . . 80
3.3.5 Lösung 5: Array Sum (?????) . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.3.6 Lösung 6: Array Min (?????) . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3.7 Lösung 7: Konvertierungen (?????) . . . . . . . . . . . . . . . . . . . . 84
3.3.8 Lösung 8: Exponentialfunktion (?????) . . . . . . . . . . . . . . . . . 87
3.3.9 Lösung 9: Pascal’sches Dreieck (?????) . . . . . . . . . . . . . . . 90
3.3.10 Lösung 10: Zahlenpalindrome (?????) . . . . . . . . . . . . . . . . . 93
3.3.11 Lösung 11: Permutationen (?????) . . . . . . . . . . . . . . . . . . . . 96
3.3.12 Lösung 12: Count Substrings (?????) . . . . . . . . . . . . . . . . . . 99
3.3.13 Lösung 13: Lineal (?????) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Inhaltsverzeichnis ix
4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.2 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
4.2.1 Aufgabe 1: Zahlenumwandlungen (?????) . . . . . . . . . . . . . . 111
4.2.2 Aufgabe 2: Joiner (?????) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
4.2.3 Aufgabe 3: Reverse String (?????) . . . . . . . . . . . . . . . . . . . . 112
4.2.4 Aufgabe 4: Palindrom (?????). . . . . . . . . . . . . . . . . . . . . . . . . 112
4.2.5 Aufgabe 5: No Duplicate Chars (?????) . . . . . . . . . . . . . . . . 113
4.2.6 Aufgabe 6: Doppelte Buchstaben entfernen (?????) . . . . . 113
4.2.7 Aufgabe 7: Capitalize (?????) . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.2.8