Übungen / Aufgaben zu Python
5 Lösungen
Iteriertes Querprodukt
Das Querprodukt einer Zahl ähnelt der Berechnung der Quersumme,
nur dass die Ziffern nicht addiert, sondern miteinander multipliziert werden.
3784 => 3 * 7 * 8 * 4 = 672
Nun soll aus dem Ergebnis wiederum das Querprodukt berechnet werden.
672 => 6 * 7 * 2 = 84
Und immer so weiter, bis nur noch eine Ziffer übrigbleibt.
84 => 8 * 4 = 32
32 => 3 * 2 = 6
Die Ziffer, die am Ende übrigbleibt, nennt man „multiplikative Ziffernwurzel“.
Die Anzahl der Schritte (Iterationen) wird als "Beharrlichkeit" bezeichnet.
Schreibe ein Programm, mit dem es möglich ist, sowohl die Beharrlichkeit als auch die multiplikative Ziffernwurzel einer beliebigen Integer- Zahl auszugeben.
Eine ausführliche Beschreibung findet man hier.
Viel Spaß
nur dass die Ziffern nicht addiert, sondern miteinander multipliziert werden.
3784 => 3 * 7 * 8 * 4 = 672
Nun soll aus dem Ergebnis wiederum das Querprodukt berechnet werden.
672 => 6 * 7 * 2 = 84
Und immer so weiter, bis nur noch eine Ziffer übrigbleibt.
84 => 8 * 4 = 32
32 => 3 * 2 = 6
Die Ziffer, die am Ende übrigbleibt, nennt man „multiplikative Ziffernwurzel“.
Die Anzahl der Schritte (Iterationen) wird als "Beharrlichkeit" bezeichnet.
Schreibe ein Programm, mit dem es möglich ist, sowohl die Beharrlichkeit als auch die multiplikative Ziffernwurzel einer beliebigen Integer- Zahl auszugeben.
Eine ausführliche Beschreibung findet man hier.
Viel Spaß
1 Lösung
Gleichwertige Zahlenpaare zählen/auflisten
Erstelle eine Methode/Funktion, mit der es möglich ist, aus einem beliebig großen Array/Liste
die Anzahl aller gleichwertigen Zahlenpaare auszugeben.
Wer möchte, kann natürlich die Zahlenpaare bzw. Indizes zusätzlich mit ausgeben.
Beispiele:
[1, 2, 3, 1, 1, 3] => 4 gleiche Zahlenpaare
mit den Indizes: (0, 3), (0, 4), (3, 4), (2, 5)
und den Lösungen: (1, 1), (1, 1), (1, 1), (3, 3)
[1, 1, 1, 1] => 6 gleiche Zahlenpaare
mit den Indizes: (0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)
und den Lösungen: (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1)
[1, 2, 3, 4] => 0 gleiche Zahlenpaare
Hier gibt es verschiedene Herangehensweisen:
Lösung 1 (einfach): Verschachteln mehrerer Schleifen
Lösung 2 (schwieriger): nur eine Schleife
Vielleicht kann man es sogar mittels Fakultät und Binomialkoeffizient berechnen?!
Ich habe dafür ad hoc auch noch keine Lösung. Es gibt hier bestimmt die eine oder andere gute Idee.
Viel Spaß
die Anzahl aller gleichwertigen Zahlenpaare auszugeben.
Wer möchte, kann natürlich die Zahlenpaare bzw. Indizes zusätzlich mit ausgeben.
Beispiele:
[1, 2, 3, 1, 1, 3] => 4 gleiche Zahlenpaare
mit den Indizes: (0, 3), (0, 4), (3, 4), (2, 5)
und den Lösungen: (1, 1), (1, 1), (1, 1), (3, 3)
[1, 1, 1, 1] => 6 gleiche Zahlenpaare
mit den Indizes: (0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)
und den Lösungen: (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1)
[1, 2, 3, 4] => 0 gleiche Zahlenpaare
Hier gibt es verschiedene Herangehensweisen:
Lösung 1 (einfach): Verschachteln mehrerer Schleifen
Lösung 2 (schwieriger): nur eine Schleife
Vielleicht kann man es sogar mittels Fakultät und Binomialkoeffizient berechnen?!
Ich habe dafür ad hoc auch noch keine Lösung. Es gibt hier bestimmt die eine oder andere gute Idee.
Viel Spaß
2 Lösungen
Feiertage in Deutschland
Die Feiertage sind vorüber – doch die nächsten stehen schon vor der Tür.
Da kann es nicht schaden, mal einen Blick in die Zukunft zu werfen.
Es soll ein Programm entwickelt werden, mit dem es möglich ist,
alle Feiertage (mit Bezeichnung und Datum) eines gewählten Bundeslandes für eine bestimmte Jahreszahl auszugeben.
Dabei sollen sowohl die festen als auch die beweglichen Feiertage berücksichtigt werden.
Ebenfalls soll es die Möglichkeit geben, die gesetzlichen Feiertage für alle Bundesländer auszugeben.
Wer möchte, kann natürlich auch noch die regionalen Feiertage wie z.B. Rosenmontag oder die - wie für einige Beamte üblichen - Feiertage wie z.B. Heilig Abend und Silvester einbringen.
Beispiel für Aufruf:
[datum, bezeichnung] FEIERTAGE(jahr, bundesland, optional: beamter/rosenmontag)
Eine Übersicht zu den einzelnen Bundesländern und den gesetzlichen Feiertagen gibt es hier.
Da kann es nicht schaden, mal einen Blick in die Zukunft zu werfen.
Es soll ein Programm entwickelt werden, mit dem es möglich ist,
alle Feiertage (mit Bezeichnung und Datum) eines gewählten Bundeslandes für eine bestimmte Jahreszahl auszugeben.
Dabei sollen sowohl die festen als auch die beweglichen Feiertage berücksichtigt werden.
Ebenfalls soll es die Möglichkeit geben, die gesetzlichen Feiertage für alle Bundesländer auszugeben.
Wer möchte, kann natürlich auch noch die regionalen Feiertage wie z.B. Rosenmontag oder die - wie für einige Beamte üblichen - Feiertage wie z.B. Heilig Abend und Silvester einbringen.
Beispiel für Aufruf:
[datum, bezeichnung] FEIERTAGE(jahr, bundesland, optional: beamter/rosenmontag)
Eine Übersicht zu den einzelnen Bundesländern und den gesetzlichen Feiertagen gibt es hier.
5 Lösungen
Berechnung Kfz-Steuer (Deutschland 2021)
Schreibe eine Methode/Funktion, mit der es möglich ist, die Kfz- Steuer sowohl für Benzin-, als auch Dieselfahrzeuge
ab dem 01.01.2021 für Deutschland zu berechnen.
Übergeben werden sollen die Parameter: Otto- o. Dieselfahrzeug, Hubraum in ccm, CO2 in g.
Als Ergebnis soll die Gesamtsteuer in Euro fürs Jahr ausgegeben werden.
Eine ausführliche Berechnungshilfe findet man hier!
Viel Spaß
ab dem 01.01.2021 für Deutschland zu berechnen.
Übergeben werden sollen die Parameter: Otto- o. Dieselfahrzeug, Hubraum in ccm, CO2 in g.
Als Ergebnis soll die Gesamtsteuer in Euro fürs Jahr ausgegeben werden.
Eine ausführliche Berechnungshilfe findet man hier!
Viel Spaß
1 Lösung
Ternäre Logik (Dreiwertige Logik)
Statt der bekannten Wahrheitswerte TRUE (t) und FALSE (f) gibt es noch einen weiteren Wert: DON’T CARE (x).
Dies wird als Dreiwertige Logik bezeichnet.
für x gilt zusätzlich bei Junktoren zur bekannten Aussagenlogik:
Negation:
NOT x => x
Konjunktion:
t AND x => x
f AND x => f
x AND x => x
Disjunktion:
t OR x => t
f OR x => x
x OR x => x
und darüber hinaus:
Inklusion:
A -> B => (NOT A) OR B
Äquivalenz:
(A <-> B) => (A -> B) AND (B -> A)
Es soll ein Programm erstellt werden, mit dem es möglich ist,
die o.a. ternäre Logik - auch innerhalb von Inklusion und Äquivalenz - abzubilden.
Hier bieten sich zur Lösung des Problems sowohl Methoden bzw. Funktionen,
als auch, wenn es die Programmiersprache zulässt, Operatorüberladungen an.
Beispiele:
t OR (NOT x) == t
NOT(x) OR (NOT(t)) == x
x -> t == t
(x OR f) <-> (x -> (f AND (NOT x))) == x
Viel Spaß
Dies wird als Dreiwertige Logik bezeichnet.
für x gilt zusätzlich bei Junktoren zur bekannten Aussagenlogik:
Negation:
NOT x => x
Konjunktion:
t AND x => x
f AND x => f
x AND x => x
Disjunktion:
t OR x => t
f OR x => x
x OR x => x
und darüber hinaus:
Inklusion:
A -> B => (NOT A) OR B
Äquivalenz:
(A <-> B) => (A -> B) AND (B -> A)
Es soll ein Programm erstellt werden, mit dem es möglich ist,
die o.a. ternäre Logik - auch innerhalb von Inklusion und Äquivalenz - abzubilden.
Hier bieten sich zur Lösung des Problems sowohl Methoden bzw. Funktionen,
als auch, wenn es die Programmiersprache zulässt, Operatorüberladungen an.
Beispiele:
t OR (NOT x) == t
NOT(x) OR (NOT(t)) == x
x -> t == t
(x OR f) <-> (x -> (f AND (NOT x))) == x
Viel Spaß
5 Lösungen
Zahlenpyramide (Reihenausgabe)
Es soll per Funktion/Methode eine Zahlenpyramide (siehe jpg) mit den Ziffern 0-9 und der Höhe 10 erstellt werden.
Dies soll bewerkstelligt werden durch:
Aufgabe 1: (leicht)
mehrerer ineinander verschachtelter Schleifen,
Aufgabe 2: (schwieriger)
nur eine Schleife.
Viel Spaß
Dies soll bewerkstelligt werden durch:
Aufgabe 1: (leicht)
mehrerer ineinander verschachtelter Schleifen,
Aufgabe 2: (schwieriger)
nur eine Schleife.
Viel Spaß
5 Lösungen
Zahlentreppe (Reihenausgabe)
Es soll per Funktion/Methode eine Zahlentreppe mit den Ziffern 0-9 und der Höhe 10 erstellt werden.
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
Dies soll bewerkstelligt werden durch:
Aufgabe 1: (leicht)
mehrerer ineinander verschachtelter Schleifen,
Aufgabe 2: (schwieriger)
nur eine Schleife.
Viel Spaß
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
Dies soll bewerkstelligt werden durch:
Aufgabe 1: (leicht)
mehrerer ineinander verschachtelter Schleifen,
Aufgabe 2: (schwieriger)
nur eine Schleife.
Viel Spaß
5 Lösungen
Kleinste positive Zahl in einem Array
Gegeben sei ein (beliebig großes) unsortiertes Integer- Array welches sowohl aus positiven als auch negativen Zahlen besteht.
Ermittelt werden soll die erste fehlende positive Zahl im Array.
Beispiele:
arr = [1, 2, 0] sortiert: [0, 1, 2]
Lösung: 3
arr = [5, 4, -2, -1, 1] sortiert: [-2, -1, 1, 4, 5]
Lösung: 2
arr = [6, 7, 8, 9, 10]
Lösung: 1
arr = [-4, -2, -1]
Lösung: 1
arr = [1, 2, 3, 4, 2147483647, 8]
Lösung: 5
arr = []
Lösung: 1
Viel Spaß
Ermittelt werden soll die erste fehlende positive Zahl im Array.
Beispiele:
arr = [1, 2, 0] sortiert: [0, 1, 2]
Lösung: 3
arr = [5, 4, -2, -1, 1] sortiert: [-2, -1, 1, 4, 5]
Lösung: 2
arr = [6, 7, 8, 9, 10]
Lösung: 1
arr = [-4, -2, -1]
Lösung: 1
arr = [1, 2, 3, 4, 2147483647, 8]
Lösung: 5
arr = []
Lösung: 1
Viel Spaß
5 Lösungen
Zielwertsuche in einem sortierten Array
Aufgabe 1 (leicht)
In einem beliebig großen sortieren Array soll das erste Vorkommen desjenigen Zahlenpaares per Index ausgegeben werden, bei dem die Summe dem gesuchten Zielwert entspricht.
Dabei kommt jede Zahl nur einmal im Array vor.
arr = [3, 4, 15, 22]
target = 7
Index = [0, 1] (3+4)
arr = [1, 3, 4, 6]
target = 8
Index = [0, 0] oder NULL/Nothing (keine Lösung)
Aufgabe 2 (mittel)
Wie Aufgabe 1, jedoch können Zahlen doppelt vorkommen.
arr = [4, 4, 5, 6]
target = 8
Index = [0, 1] (4+4)
Aufagbe 3 (schwer)
In einem beliebig großen sortieren Array sollen alle Vorkommen derjenigen Zahlenpaare per Indizes ausgegeben werden, bei denen die Summen dem gesuchten Zielwert entsprechen. Dabei können alle Zahlen mehrfach vorkommen.
arr = [1, 3, 4, 6]
target = 7
Indizes = [0, 3] (1+6), [1, 2] (3+4)
Noch ein wenig schwieriger:
arr = [4, 4, 4, 5, 6]
target = 8
Indizes = [0, 1] (4+4), [0, 2] (4 + 4), [1, 2] (4 + 4)
Für alle Aufgaben gilt:
Dopplungen wie [1, 3] und [3, 1] gelten als gleichwertig und sollen nicht ausgegeben werden.
Viel Spaß
In einem beliebig großen sortieren Array soll das erste Vorkommen desjenigen Zahlenpaares per Index ausgegeben werden, bei dem die Summe dem gesuchten Zielwert entspricht.
Dabei kommt jede Zahl nur einmal im Array vor.
arr = [3, 4, 15, 22]
target = 7
Index = [0, 1] (3+4)
arr = [1, 3, 4, 6]
target = 8
Index = [0, 0] oder NULL/Nothing (keine Lösung)
Aufgabe 2 (mittel)
Wie Aufgabe 1, jedoch können Zahlen doppelt vorkommen.
arr = [4, 4, 5, 6]
target = 8
Index = [0, 1] (4+4)
Aufagbe 3 (schwer)
In einem beliebig großen sortieren Array sollen alle Vorkommen derjenigen Zahlenpaare per Indizes ausgegeben werden, bei denen die Summen dem gesuchten Zielwert entsprechen. Dabei können alle Zahlen mehrfach vorkommen.
arr = [1, 3, 4, 6]
target = 7
Indizes = [0, 3] (1+6), [1, 2] (3+4)
Noch ein wenig schwieriger:
arr = [4, 4, 4, 5, 6]
target = 8
Indizes = [0, 1] (4+4), [0, 2] (4 + 4), [1, 2] (4 + 4)
Für alle Aufgaben gilt:
Dopplungen wie [1, 3] und [3, 1] gelten als gleichwertig und sollen nicht ausgegeben werden.
Viel Spaß
4 Lösungen
Median zweier zusammengefügter Arrays
Es soll der Median (Zentralwert) eines sortierten Arrays,
das aus zwei (beliebig großen) zusammengefügten sortierten Arrays besteht, ermittelt werden.
Beispiele:
arr1 = [1, 3] arr2 = [2]
mergeSorted = [1, 2, 3] -> Median = 2
arr1 = [2, 4] arr2 = [1, 3]
mergeSorted = [1, 2, 3, 4] -> Median = 2.5
(wenn kein Zentralwert vorhanden ist, dann wird das arithmetische Mittel der beiden mittleren Zahlen ermittelt)
-> (2+3) / 2 = 2.5
Weitere Beispiele:
[0, 0] [0, 0] -> 0
[] [4] -> 4
[3] [] -> 3
[] [] -> 0
[-4, 4] [-2, 1] -> [-4, -2, 1, 4] -> -0.5
Fortgeschrittene können die Funktion/Methode dahingehend erweitern,
sodass sowohl mindestens 2 Arrays aufgenommen werden,
als auch auch ein Array bzw. eine Liste von Arrays verarbeitet werden kann.
Viel Spaß
das aus zwei (beliebig großen) zusammengefügten sortierten Arrays besteht, ermittelt werden.
Beispiele:
arr1 = [1, 3] arr2 = [2]
mergeSorted = [1, 2, 3] -> Median = 2
arr1 = [2, 4] arr2 = [1, 3]
mergeSorted = [1, 2, 3, 4] -> Median = 2.5
(wenn kein Zentralwert vorhanden ist, dann wird das arithmetische Mittel der beiden mittleren Zahlen ermittelt)
-> (2+3) / 2 = 2.5
Weitere Beispiele:
[0, 0] [0, 0] -> 0
[] [4] -> 4
[3] [] -> 3
[] [] -> 0
[-4, 4] [-2, 1] -> [-4, -2, 1, 4] -> -0.5
Fortgeschrittene können die Funktion/Methode dahingehend erweitern,
sodass sowohl mindestens 2 Arrays aufgenommen werden,
als auch auch ein Array bzw. eine Liste von Arrays verarbeitet werden kann.
Viel Spaß
2 Lösungen
Landeablage Fallschirmspringer
Fallschirmspringer versuchen stets ihre vorgegebene Landezone (rot) zu treffen. Dennoch kommt es häufiger vor, dass aufgrund von unvorhergesehenen Einflüssen wie Scher- und Bodenwinde diese auch mal verfehlt wird (blau, orange, grün). Landeablagen, die radial einen Wert größer als 100m haben müssen dokumentiert werden. Dabei werden die Entfernung und die Richtung zum Soll- Ziel ermittelt. Die Koordinate (UTM) der Soll-Landezone ist bekannt.
Der Ist- Landepunkt wird mit einem GPS- Modul als Koordinate im UTM- Verfahren (WGS-84) ermittelt. Die Skizze im Anhang soll dies verdeutlichen.
Beispielkoordinate:
Ost: 374200
3: 100km- Quadrat
74200: Angabe in Meter -> 74200m (für Berechnung wichtig)
Nord: 5500150
55: 100km- Quadrat
00150: Angabe in Meter -> 150m (für Berechnung wichtig)
UTM: 374200 5500150
Beispiel zur Berechnung:
Soll- Koordinate: [Ost: 383000, Nord: 5500010]
Ist- Koordinate: [Ost: 383320, Nord: 5500220]
Wie groß sind die Landeablage in Meter und die Richtungsablage in Grad zu geografisch Nord?
Schreibe ein Programm, mit dem es möglich ist, jegliche Ablage in beliebige Richtung zu bestimmen.
Der Ist- Landepunkt wird mit einem GPS- Modul als Koordinate im UTM- Verfahren (WGS-84) ermittelt. Die Skizze im Anhang soll dies verdeutlichen.
Beispielkoordinate:
Ost: 374200
3: 100km- Quadrat
74200: Angabe in Meter -> 74200m (für Berechnung wichtig)
Nord: 5500150
55: 100km- Quadrat
00150: Angabe in Meter -> 150m (für Berechnung wichtig)
UTM: 374200 5500150
Beispiel zur Berechnung:
Soll- Koordinate: [Ost: 383000, Nord: 5500010]
Ist- Koordinate: [Ost: 383320, Nord: 5500220]
Wie groß sind die Landeablage in Meter und die Richtungsablage in Grad zu geografisch Nord?
Schreibe ein Programm, mit dem es möglich ist, jegliche Ablage in beliebige Richtung zu bestimmen.
2 Lösungen
Bonusaufgabe 5 (schwer) - Permutationen.
Implementieren Sie eine rekursive Funktion permute, die alle Permutationen der Elemente eines sequentiellen Datentyps (Slice-Operator wird unterstützt) bestimmt und als Elemente einer Liste ausgibt.
Beispieloutput:
Beispieloutput:
Python-Code
permute("abc") ['abc', 'acb', 'bac', 'bca', 'cab', 'cba'] # Führen Sie diese Zelle aus, um Ihre Funktion zu testen. # Wenn das Ausführen dieser Zelle zu Fehlern führt, dann ist Ihre Implementierung vermutlich nicht korrekt. assert sorted(permute("abc")) == sorted(['abc', 'acb', 'bac', 'bca', 'cab', 'cba']) assert sorted(permute("ab")) == sorted(['ab', 'ba']) assert sorted(permute([1, 2])) == sorted([[1, 2], [2, 1]]) assert sorted(permute((1, 2, 3))) == sorted([(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)])