Übungen / Aufgaben zu Python
1 Lösung
Abschätzung der Gewinnchancen eines KENO-Types
Zur Erinnerung, was ist KENO: Aus 70 Zahlen werden 20 Gewinnzahlen per Zufallsgenerator ermittelt.
Es gibt die KENO-Typen 2, 3 ... 10, d. h. man kann 2, 3 ... 10 Zahlen aus den Zahlen 1 ... 70 wählen.
Bei KENO-Typ N können 0, 1 ... N gewählte Zahlen in den 20 gelosten Gewinnzahlen enthalten sein
(je mehr, desto höher natürlich der Gewinn).
Die Programmieraufgabe bestehe darin, mittels stochastischer Simulation die Wahrscheinlichkeit dafür abzuschätzen,
wie hoch die Chance ist, bei KENO-Typ N, 0, 1, 2 ... oder gar N Richtige auf seinem Tippzettel zu haben?
Die exakten Werte könnt ihr u. a. z. B. auf
https://www.sachsenlotto.de/portal/spiele/keno/gewinnquoten.jsp
nachsehen.
Es gibt die KENO-Typen 2, 3 ... 10, d. h. man kann 2, 3 ... 10 Zahlen aus den Zahlen 1 ... 70 wählen.
Bei KENO-Typ N können 0, 1 ... N gewählte Zahlen in den 20 gelosten Gewinnzahlen enthalten sein
(je mehr, desto höher natürlich der Gewinn).
Die Programmieraufgabe bestehe darin, mittels stochastischer Simulation die Wahrscheinlichkeit dafür abzuschätzen,
wie hoch die Chance ist, bei KENO-Typ N, 0, 1, 2 ... oder gar N Richtige auf seinem Tippzettel zu haben?
Die exakten Werte könnt ihr u. a. z. B. auf
https://www.sachsenlotto.de/portal/spiele/keno/gewinnquoten.jsp
nachsehen.
5 Lösungen
Quadratzahlen zwischen 1 und 100
Schreibe ein kleines Programm, das die Quadratzahlen zwischen 1 und 100 ausgibt. (Nicht die ersten 100 Quadratzahlen, die Aufgabe gibt es schon.)
4 Lösungen
Zahlen in Wörtern ausdrücken
Schreiben Sie ein Programm, das Zahlen von 0 bis 99 in Wörtern fasst.
Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
Zusatzaufgabe : Erweitern Sie das Programm von 0 bis 1000.
1 Lösung
Mathematische Vektoroperationen
Erstellen Sie ein Programm/ eine Funktion, mit der Vektorberechnungen durchgeführt werden können.
"Vektor" soll eine eigens erstellte Klasse sein, die aus 3 Fließkommazahlen bestehen.
Zudem beinhaltet die Klasse "Vektor" eine Methode zur Skalarmultiplikation, Addition, Subtraktion, Division und um das Kreuzprodukt zu berrechnen.
Erstellen Sie zur Darstellung eine Ausgabemethode.
Hinweis:
- Anstatt neue Methoden zu erstellen, können (sofern möglich) bereits vorhandene überladen werden.
- Mathematische Rechenregeln unter: https://de.wikipedia.org/wiki/Vektor
"Vektor" soll eine eigens erstellte Klasse sein, die aus 3 Fließkommazahlen bestehen.
Zudem beinhaltet die Klasse "Vektor" eine Methode zur Skalarmultiplikation, Addition, Subtraktion, Division und um das Kreuzprodukt zu berrechnen.
Erstellen Sie zur Darstellung eine Ausgabemethode.
Hinweis:
- Anstatt neue Methoden zu erstellen, können (sofern möglich) bereits vorhandene überladen werden.
- Mathematische Rechenregeln unter: https://de.wikipedia.org/wiki/Vektor
3 Lösungen
Anzahl an Nachbar-Dupletten in einem Array
Es sollen die Anzahl von den Nachbar-Dubletten eines Zahlen-Arrays ermittelt werden. Die Nachbar-Dubletten sind gleiche benachbarte Zahlen in einem Array.
Es soll außerdem auf folgendes geachtet werden: Die Nachbar-Dubletten sind genau nur für zwei benachbarte Mitglieder definiert - sollte ein drittes Mitglied dabei benachbart sein, wird es nicht mitgezählt, weil es noch einen gleichen Nachbar braucht.
Beispiel:
Array = [3,3,7] : Ausgabe = 1
Array = [3,3,3] : Ausgabe = 1 (Mitglieder von Index 0 und 1 sind benachbart, Index 2 braucht auch ein Nachbar aber hat keinen)
Array = [3,3,3,3] : Ausgabe = 2
Array = [0, 3, 3, 3, 2, 7, 7, 7, 7, 3, 2, 1, 1, -2, 4, 4, 8, 9, 8, 6 ] : Ausgabe = 5
Zusatzanforderungen:
- Unter 30 Zeilen Code
- Variable Länge der Arrays
- Alle reellen Zahlen werden akzeptiert
Es soll außerdem auf folgendes geachtet werden: Die Nachbar-Dubletten sind genau nur für zwei benachbarte Mitglieder definiert - sollte ein drittes Mitglied dabei benachbart sein, wird es nicht mitgezählt, weil es noch einen gleichen Nachbar braucht.
Beispiel:
Array = [3,3,7] : Ausgabe = 1
Array = [3,3,3] : Ausgabe = 1 (Mitglieder von Index 0 und 1 sind benachbart, Index 2 braucht auch ein Nachbar aber hat keinen)
Array = [3,3,3,3] : Ausgabe = 2
Array = [0, 3, 3, 3, 2, 7, 7, 7, 7, 3, 2, 1, 1, -2, 4, 4, 8, 9, 8, 6 ] : Ausgabe = 5
Zusatzanforderungen:
- Unter 30 Zeilen Code
- Variable Länge der Arrays
- Alle reellen Zahlen werden akzeptiert
0 Lösungen
Postleitzahl (PLZ) zu erstellen
Die Idee dieses Programmes soll sein, ein Nachschlagewerk für österreichische Postleitzahlen zu erstellen.
Repräsentativ sollen 9 beliebige Postleitzahlen, eins pro Bundesland, hardcoded eingetragen werden.
Jede PLZ besteht aus einer Zahl, die auf keinen Fall doppelt vorkommen darf und einem eindeutigen Stadtnamen, welcher anders als die Zahl doppelt vorkommen darf (z.B. 1010 Wien, 1020 Wien)
Überlegen Sie sich zuerst gut welchen geeigneten Datentyp Sie verwenden, in den Sie alle Daten strukturiert speichern können. Ich nenne diesen Datentyp im folgenden immer Datensatz.
Erstellen Sie sich für jeden der nachfolgenden Überschriften einen Menüpunkt in ihrem Programm.
z.B. Ausgabe Konsole:
0 - Exit
1 - PLZ erzeugen …
PLZ erzeugen
Es soll möglich sein eine beliebige Anzahl an PLZ zum Datensatz hinzufügen zu können. Ist die PLZ bereits vorhanden, so soll erst mit dem geheimen PIN 1234 das Ändern des Eintrages erlaubt werden. Fragen Sie unbedingt, ob eine Änderung (nur Name) vorgenommen werden soll.
Bedenken Sie, dass eine PLZ in Österreich immer aus genau 4 Zahlen besteht.
PLZ anzeigen
Es soll möglich sein alle PLZ aus dem Datensatz auf einmal auszugeben, um sich die passende zu finden. Sortieren Sie unbedingt den Datensatz nach jedem neuen Eintrag nach der PLZ.
PLZ suchen
Beim Suchen soll es möglich sein einzelne oder mehrere PLZ aufzulisten. Wird bspw. 1010
eingegeben so soll 1010 Wien (PLZ inkl. Name) ausgegeben werden. Wird nur 1 eingegeben und
gesucht, so sollen alle PLZ inkl Name mit 1 beginnend ausgegeben werden. Wird 10 eingegeben, so
sollen alle PLZ inkl. Name mit 10 beginnend ausgegeben werden usw.
Optional: Wird Wien eingegeben, so sollen alle Wiener PLZ aufgelistet werden.
Das Programm darf bei der Suche keinesfalls abstürzen!
Erweiterung
Erweitern Sie nun das Programm um folgende Funktion:
Es soll nach einer Adresse gefragt werden. Erst Adresszeile, dann PLZ, dann Stadt. Eine Adresse,
besteht immer aus einer Adresszeile einer PLZ und einer Stadt.
Ist die PLZ aus dem Datensatz bekannt, soll gar nicht mehr nach dem Stadtnamen gefragt und
automatisch vervollständigt werden. Außerdem soll die eingegebene Adresse ausgegeben und vom
User kontrolliert werden. Zudem soll diese direkt in eine Liste gespeichert werden, wenn diese
korrekt ist. Selbstverständlich soll in der Liste der Städtename ebenfalls hinterlegt sein.
War die PLZ nicht bekannt, soll diese in den Datensatz für die Zukunft gespeichert werden, nachdem
die Korrektheit der Adresse bestätigt wurde.
Geben Sie abschließend alle Adressen aus der Liste, sowie alle PLZ aus dem Datensatz aus.
Repräsentativ sollen 9 beliebige Postleitzahlen, eins pro Bundesland, hardcoded eingetragen werden.
Jede PLZ besteht aus einer Zahl, die auf keinen Fall doppelt vorkommen darf und einem eindeutigen Stadtnamen, welcher anders als die Zahl doppelt vorkommen darf (z.B. 1010 Wien, 1020 Wien)
Überlegen Sie sich zuerst gut welchen geeigneten Datentyp Sie verwenden, in den Sie alle Daten strukturiert speichern können. Ich nenne diesen Datentyp im folgenden immer Datensatz.
Erstellen Sie sich für jeden der nachfolgenden Überschriften einen Menüpunkt in ihrem Programm.
z.B. Ausgabe Konsole:
0 - Exit
1 - PLZ erzeugen …
PLZ erzeugen
Es soll möglich sein eine beliebige Anzahl an PLZ zum Datensatz hinzufügen zu können. Ist die PLZ bereits vorhanden, so soll erst mit dem geheimen PIN 1234 das Ändern des Eintrages erlaubt werden. Fragen Sie unbedingt, ob eine Änderung (nur Name) vorgenommen werden soll.
Bedenken Sie, dass eine PLZ in Österreich immer aus genau 4 Zahlen besteht.
PLZ anzeigen
Es soll möglich sein alle PLZ aus dem Datensatz auf einmal auszugeben, um sich die passende zu finden. Sortieren Sie unbedingt den Datensatz nach jedem neuen Eintrag nach der PLZ.
PLZ suchen
Beim Suchen soll es möglich sein einzelne oder mehrere PLZ aufzulisten. Wird bspw. 1010
eingegeben so soll 1010 Wien (PLZ inkl. Name) ausgegeben werden. Wird nur 1 eingegeben und
gesucht, so sollen alle PLZ inkl Name mit 1 beginnend ausgegeben werden. Wird 10 eingegeben, so
sollen alle PLZ inkl. Name mit 10 beginnend ausgegeben werden usw.
Optional: Wird Wien eingegeben, so sollen alle Wiener PLZ aufgelistet werden.
Das Programm darf bei der Suche keinesfalls abstürzen!
Erweiterung
Erweitern Sie nun das Programm um folgende Funktion:
Es soll nach einer Adresse gefragt werden. Erst Adresszeile, dann PLZ, dann Stadt. Eine Adresse,
besteht immer aus einer Adresszeile einer PLZ und einer Stadt.
Ist die PLZ aus dem Datensatz bekannt, soll gar nicht mehr nach dem Stadtnamen gefragt und
automatisch vervollständigt werden. Außerdem soll die eingegebene Adresse ausgegeben und vom
User kontrolliert werden. Zudem soll diese direkt in eine Liste gespeichert werden, wenn diese
korrekt ist. Selbstverständlich soll in der Liste der Städtename ebenfalls hinterlegt sein.
War die PLZ nicht bekannt, soll diese in den Datensatz für die Zukunft gespeichert werden, nachdem
die Korrektheit der Adresse bestätigt wurde.
Geben Sie abschließend alle Adressen aus der Liste, sowie alle PLZ aus dem Datensatz aus.
3 Lösungen
Überholen: benötigte Strecke und Dauer berechnen
Es soll ein Programm für die Berechnung von Überhol-weg und Überhol-zeit (bei angenommener konstanten Geschwindigkeit) erstellt werden.
Dazu werden die Länge der beiden Fahrzeuge (l1 und l2) und deren Geschwindigkeit (v1 und v2) angegeben.
Aus diesen Daten ermitteln wir den Sicherheitsabstand (a).
Dieser soll der halben Geschwindigkeit entsprechen. Also bei 100 km/h sind 60 m Sicherheitsabstand einzuhalten.
Die benötigte Strecke berechnen wir dann nach folgender Formel:
s = v1 / (v1−v2) * (l1+l2+2*a)
Weitere Information findet ihr hier: Video
Viel Spaß!
Dazu werden die Länge der beiden Fahrzeuge (l1 und l2) und deren Geschwindigkeit (v1 und v2) angegeben.
Aus diesen Daten ermitteln wir den Sicherheitsabstand (a).
Dieser soll der halben Geschwindigkeit entsprechen. Also bei 100 km/h sind 60 m Sicherheitsabstand einzuhalten.
Die benötigte Strecke berechnen wir dann nach folgender Formel:
s = v1 / (v1−v2) * (l1+l2+2*a)
Weitere Information findet ihr hier: Video
Viel Spaß!
2 Lösungen
Game - Heiß oder Kalt
Das Spiel läuft folgender Maßen ab:
- Spieler 1 denkt sich eine Zahl aus
- Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
- nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler 1 näher kommt oder nicht)
-Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit ausgegeben werden.
Have Fun
- Spieler 1 denkt sich eine Zahl aus
- Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
- nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler 1 näher kommt oder nicht)
-Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit ausgegeben werden.
Have Fun
2 Lösungen
Ein nicht-rekursiver Algorithmus!
Was leistet folgender rekursiver Algorithmus für natürliche Zahlen n mit n>0?
Geben Sie einen nicht-rekursiven Algorithmus an, der dasselbe leistet.
int DoSomething(int n)
{
if (n == 1)
return n - 1;
else
{
if ((n / 2) * 2 == n)
{
return 1 + DoSomething(n - 1);
}
else
{
return DoSomething(n - 1);
}
}
}
Geben Sie einen nicht-rekursiven Algorithmus an, der dasselbe leistet.
2 Lösungen
Konsolenanwendung zur Bestimmung der Primzahlen - Ganzzahlenbereich
Schreiben Sie eine Konsolenanwendung zur Bestimmung der Primzahlen in dem vom Nutzer eingegebenen Ganzzahlenbereich von Null bis n unter Verwendung des Siebs des Eratosthenes.
Wie viele Primzahlen gibt es im Zahlenbereich bis 100?
Wie viele Primzahlen gibt es im Zahlenbereich bis 10.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 1.000.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 100?
Wie viele Primzahlen gibt es im Zahlenbereich bis 10.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 1.000.000?
2 Lösungen
Galgenraten (hangman)
Erstelle ein Konsolenspiel in der Form „Galgenraten“.
Spieler 1 gibt verdeckt ein zu erratenes Wort ein.
Regeln: Buchstaben a-z, keine Zahlen, ä = ae, ö = oe, ü = ue, ß = ss
Spieler 2 muss versuchen die richtigen Buchstaben zu erraten.
Dazu wird am Anfang des Spiels jeder Buchstabe des Lösungsworts als „Unterstrich“ dargestellt.
Errät Spieler 2 einen Buchstaben, wird der Unterstrich an allen Positionen an der sich der gefundene Buchstabe befindet durch den jeweiligen Buchstaben ersetzt.
Es sollen am Ende des Spiels die benötigte Zeit und die Anzahl der Versuche ausgegeben werden.
Die Anzahl der Versuche soll ähnlich wie beim Galgenraten begrenzt werden.
Varianten:
Der Spieler 2 kann auch das Lösungswort eingeben. Ist das Wort falsch, wird es als 2 Fehlversuche gewertet.
Als Hilfe könnten die bereits genutzten Buchstaben angezeigt werden.
Aus der Anzahl der benötigten Versuche und der Zeit könnten Gewinnpunkte generiert werden.
Viel Spaß
Spieler 1 gibt verdeckt ein zu erratenes Wort ein.
Regeln: Buchstaben a-z, keine Zahlen, ä = ae, ö = oe, ü = ue, ß = ss
Spieler 2 muss versuchen die richtigen Buchstaben zu erraten.
Dazu wird am Anfang des Spiels jeder Buchstabe des Lösungsworts als „Unterstrich“ dargestellt.
Errät Spieler 2 einen Buchstaben, wird der Unterstrich an allen Positionen an der sich der gefundene Buchstabe befindet durch den jeweiligen Buchstaben ersetzt.
Es sollen am Ende des Spiels die benötigte Zeit und die Anzahl der Versuche ausgegeben werden.
Die Anzahl der Versuche soll ähnlich wie beim Galgenraten begrenzt werden.
Varianten:
Der Spieler 2 kann auch das Lösungswort eingeben. Ist das Wort falsch, wird es als 2 Fehlversuche gewertet.
Als Hilfe könnten die bereits genutzten Buchstaben angezeigt werden.
Aus der Anzahl der benötigten Versuche und der Zeit könnten Gewinnpunkte generiert werden.
Viel Spaß
2 Lösungen
flexible Temperaturumrechnung
Gegeben sei ein String-Array mit einer beliebigen Anzahl von Temperaturangaben in °C, °F oder K (z. B. "24,5 °C", "74.3 °F" oder "-270 K"). Dabei sollen unterschiedliche Ausprägungen vorliegen: positive/negative Zahlen, Ganzzahlen/Kommazahlen, Trennung durch Punkt oder Komma, Angaben mit "°" oder ohne, Angabe der Einheit ("K"/"C"/"F", evtl. auch "k"/"c"/"f"), Variationen der Anordnung von Leerzeichen.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.
Das Programm soll nacheinander alle Strings analysieren und jeweils die Zahl und die Einheit ermitteln und in Variablen speichern, die Temperatur von der gegebenen Einheit in die beiden anderen Einheiten umrechnen und alle drei Werte geordnet mit einer Nachkommastelle ausgeben.