schule:programmieruebungen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| schule:programmieruebungen [2019-12-19 15:52] – Übungen zu Fehlern ausgelagert marco.bakera | schule:programmieruebungen [2021-05-06 18:55] (aktuell) – [Links] elevator challenge: link zu py3 version pintman | ||
|---|---|---|---|
| Zeile 5: | Zeile 5: | ||
| ===== Übungen zu Schleifen ===== | ===== Übungen zu Schleifen ===== | ||
| - | Bei den folgenden Aufgaben ist die Lösung mit einer for-Schleife einfach zu erstellen. Kannst du sie auch mit einer while-Schleife lösen? | + | → [[Programmierübungen Schleifen]] |
| - | Für Profis, dich sich mit [[Rekursion]] auskennen: Man kann die Aufgaben sogar komplett ohne Schleife lösen. | ||
| - | ==== Zahlen bis maximum | + | ===== Mini-Projekte ===== |
| - | Von der Tastatur wird eine Zahl '' | + | Die folgenden kleineren Projekte können in kurzer Zeit umgesetzt werden und |
| + | zeigen unterschiedliche interessante Aspekte | ||
| - | | + | |
| - | | + | |
| - | + | * [[Zahlenraten]] | |
| - | + | | |
| - | ==== Gerade Zahlen ==== | + | |
| - | + | ||
| - | Von der Tastatur wird eine Zahl '' | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| | | ||
| - | ==== Hoch- und Runterzählen ==== | ||
| - | |||
| - | Das Programm gibt die Zahlen von 1 bis 10 und dahinter die Zahlen von 10 bis 1 aus. Es zählt also einmal rauf und dann wieder runter. Versuche, nur //eine// for-Schleife zu verwenden. | ||
| - | |||
| - | Ausgabe: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 | ||
| - | | ||
| - | | ||
| - | ==== Sternenreihe ==== | ||
| - | |||
| - | Schreiben Sie ein Programm, das zunächst die Eingabe einer positiven Zahl '' | ||
| - | Beispielablauf des Programms (Benutzereingaben in <>): | ||
| - | |||
| - | Anzahl (>0): <8> | ||
| - | ******** | ||
| - | |||
| - | ==== Sternentreppe ==== | ||
| - | |||
| - | Schreiben Sie ein Programm, das nach Eingabe einer positiven Zahl '' | ||
| - | Beispielablauf des Programms (Benutzereingaben in <>): | ||
| - | |||
| - | Hoehe (>0): <5> | ||
| - | | ||
| - | * | ||
| - | ** | ||
| - | *** | ||
| - | **** | ||
| - | ***** | ||
| - | |||
| - | |||
| - | ==== Sternendreieck ==== | ||
| - | |||
| - | Schreiben Sie ein Programm, das nach Eingabe einer ungeraden Zahl '' | ||
| - | Beispielablauf des Programms (Benutzereingaben in <>): | ||
| - | |||
| - | Basislaenge (>0 und ungerade): <9> | ||
| - | | ||
| - | * | ||
| - | *** | ||
| - | ***** | ||
| - | | ||
| - | ********* | ||
| - | |||
| - | |||
| - | |||
| - | ===== BMI-Rechner ===== | ||
| - | |||
| - | Der [[wpde> | ||
| - | |||
| - | Beispielablauf des Programms (Benutzereingaben in <>): | ||
| - | |||
| - | Bitte geben Sie Ihr Gewicht ein (in kg): <75> | ||
| - | Bitte geben Sie ihre Größe ein (in m): < | ||
| - | BMI = 22.89307408198773 | ||
| - | | ||
| - | ===== Notenrechner ===== | ||
| - | |||
| - | Der Notenrechner berechnet die Note bei Eingabe der Gesamtpunktzahl und der erreichten Punkte nach dem IHK-Schlüssel. | ||
| - | |||
| - | ^Note^ab | ||
| - | |1 | 92% | | ||
| - | |2 | 81% | | ||
| - | |3 | 67% | | ||
| - | |4 | 50% | | ||
| - | |5 | 30% | | ||
| - | |||
| - | Beispielablauf eines Programms (Nutzereingaben in ''<>'' | ||
| - | |||
| - | < | ||
| - | Maximale Punktzahl: <10> | ||
| - | Note ab | ||
| - | 1 9.2 | ||
| - | 2 8.1 | ||
| - | 3 6.7 | ||
| - | 4 5.0 | ||
| - | 5 3.0 | ||
| - | 6 0.0 | ||
| - | |||
| - | Maximale Punktzahl: <5> | ||
| - | Note ab | ||
| - | 1 4.6 | ||
| - | 2 4.05 | ||
| - | 3 3.35 | ||
| - | 4 2.5 | ||
| - | 5 1.5 | ||
| - | 6 0.0 | ||
| - | </ | ||
| - | ===== Zahlenraten ===== | ||
| - | |||
| - | Bei dem Spiel Zahlenraten geht es darum, möglichst schnell eine Zahl zwischen 0 und 100 zu erraten, die sich der Computer zufällig ausgedacht hat. Man kann dem Computer immer wieder eine Zahl nennen und er antwortet jeweils mit //Die gesuchte Zahl ist kleiner// oder //Die gesuchte Zahl ist größer// oder //Richtig geraten//. | ||
| - | |||
| - | Erstelle ein Programm, mit dem du das Spiel gegen den Computer spielen kann. | ||
| - | |||
| - | __Tipp:__ Eine Zufallszahl zwischen a und b kann in Python mit '' | ||
| - | |||
| ===== Übungen zu Klassen und Objekten ===== | ===== Übungen zu Klassen und Objekten ===== | ||
| Zeile 125: | Zeile 26: | ||
| → [[Programmierübungen Fehler]] | → [[Programmierübungen Fehler]] | ||
| - | |||
| - | |||
| ===== Schlechter Stil ===== | ===== Schlechter Stil ===== | ||
| - | Welche stilistischen Probleme erkennst du bei der folgenden Funktion? | + | Welche stilistischen Probleme erkennst du bei der folgenden Funktion? |
| + | Probleme. | ||
| <code python> | <code python> | ||
| Zeile 166: | Zeile 66: | ||
| --></ | --></ | ||
| - | ===== Verschiedene | + | ===== Testgetriebene Entwicklung (TDD) ===== |
| + | |||
| + | → [[Testgetriebene Entwicklung (Übung)]] | ||
| + | |||
| + | |||
| + | ===== Unterschiedliche | ||
| Erstelle die Funktionen, linear(n), quadratic(n), | Erstelle die Funktionen, linear(n), quadratic(n), | ||
| Zeile 303: | Zeile 208: | ||
| <file python ttt.py> | <file python ttt.py> | ||
| + | ''' | ||
| + | Auf diese Art kann die Klasse verwendet werden: | ||
| + | |||
| + | >>> | ||
| + | >>> | ||
| + | {} | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | {(1, 1): ' | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | True | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | {(1, 1): ' | ||
| + | ''' | ||
| + | |||
| + | import doctest | ||
| + | |||
| class TicTacToe: | class TicTacToe: | ||
| 'A game of tic tac toe.' | 'A game of tic tac toe.' | ||
| Zeile 325: | Zeile 257: | ||
| - | # Tests | + | |
| ttt = TicTacToe() | ttt = TicTacToe() | ||
| Zeile 340: | Zeile 272: | ||
| assert ttt.x_wins() | assert ttt.x_wins() | ||
| assert not ttt.o_wins() | assert not ttt.o_wins() | ||
| + | |||
| + | doctest.testmod() | ||
| </ | </ | ||
| < | < | ||
| + | ''' | ||
| + | Auf diese Art kann die Klasse verwendet werden: | ||
| + | |||
| + | >>> | ||
| + | >>> | ||
| + | {} | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | {(1, 1): ' | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | True | ||
| + | >>> | ||
| + | False | ||
| + | >>> | ||
| + | {(1, 1): ' | ||
| + | ''' | ||
| + | |||
| + | import doctest | ||
| + | |||
| class TicTacToe: | class TicTacToe: | ||
| 'A game of tic tac toe.' | 'A game of tic tac toe.' | ||
| Zeile 351: | Zeile 312: | ||
| def place_x_at(self, | def place_x_at(self, | ||
| + | assert 0 <= x <= 2 and 0 <= y <= 2 | ||
| self.stones[(x, | self.stones[(x, | ||
| def place_o_at(self, | def place_o_at(self, | ||
| + | assert 0 <= x <= 2 and 0 <= y <= 2 | ||
| self.stones[(x, | self.stones[(x, | ||
| Zeile 402: | Zeile 365: | ||
| assert not ttt.o_wins() | assert not ttt.o_wins() | ||
| + | doctest.testmod() | ||
| --></ | --></ | ||
| - | ===== IBAN-Prüfsumme ===== | ||
| - | Die [[wpde> | ||
| - | |||
| - | DE**68** 2105 0170 0012 3456 78 | ||
| - | |||
| - | Sie wird z.B. bei Überweisungen verwendet, um das Empfängerkonto anzugeben. Diese IBAN hat im vorderen Bereich zwei Prüfziffern, | ||
| - | |||
| - | - Schaue dir den [[wpde> | ||
| - | - Schreibe ein Programm, das eine IBAN überprüft und ausgibt, ob eine eingegebene IBAN korrekt ist oder nicht. | ||
| - | - (schwieriger) Schreibe ein Programm, dass eine Prüfziffer berechnet. | ||
| ===== Programm, das den eigenen Quelltext ausgibt ===== | ===== Programm, das den eigenen Quelltext ausgibt ===== | ||
| - | Schreibe ein Programm, das den eigenen | + | → [[Eigenen |
| - | Das schöne an dieser Aufgabenstellung ist, dass sie zunächst sehr einfach und nach ein paar Versuchen faktisch unmöglich erscheint. | ||
| - | Versuche dich selbst an einem [[Python]]-Programm, | ||
| - | |||
| - | Wenn du keinen Ansatz findest, kann du den (unvollständigen) Quelltext aus der Fußnote(( | ||
| - | <code python> | ||
| - | source = [ | ||
| - | ' | ||
| - | ... | ||
| - | ] | ||
| - | |||
| - | print(" | ||
| - | for line in source: | ||
| - | print(line, "," | ||
| - | ... | ||
| - | |||
| - | </ | ||
| - | )) nutzen. | ||
| - | ===== FizzBuzz Katas ===== | ||
| - | |||
| - | Bei dem FizzBuzz-Spiel werden die Zahlen von 1 bis 100 durchlaufen. Nun können folgende Fälle eintreten: | ||
| - | |||
| - | - Wenn die Zahl durch 3 teilbar ist, wird " | ||
| - | - wenn sie durch 5 teilbar ist, wird " | ||
| - | - wenn sie durch 3 und 5 teilbar ist, wird " | ||
| - | - Tritt keiner dieser Fälle ein, wird die Zahl ausgegeben. | ||
| - | |||
| - | Ob eine Zahl durch eine andere Zahl teilbar ist, kann mit Hilfe des [[https:// | ||
| - | |||
| - | Die ersten 20 Ausgaben sehen wir folgt aus: | ||
| - | < | ||
| - | 1 | ||
| - | 2 | ||
| - | Fizz | ||
| - | 4 | ||
| - | Buzz | ||
| - | Fizz | ||
| - | 7 | ||
| - | 8 | ||
| - | Fizz | ||
| - | Buzz | ||
| - | 11 | ||
| - | Fizz | ||
| - | 13 | ||
| - | 14 | ||
| - | FizzBuzz | ||
| - | 16 | ||
| - | 17 | ||
| - | Fizz | ||
| - | 19 | ||
| - | Buzz | ||
| - | </ | ||
| - | |||
| - | |||
| - | Versuche das Problem nun auf unterschiedliche Arten in den folgenden Katas (Übungen) zu lösen: | ||
| - | |||
| - | - auf Papier | ||
| - | - mit einer Methode | ||
| - | - ohne Verwendung einer Schleife (rekursiv) | ||
| - | - mit Hilfe von nebenläufigen Threads | ||
| - | - mit einer anderen IDE | ||
| - | - in einer anderen Programmiersprache | ||
| - | - als Client-Server Anwendung | ||
| - | - mit einer grafischen Oberfläche (GUI) | ||
| - | - Objekt-Orientiert: | ||
| - | - objekt-orientiert mit Vererbung | ||
| - | - funktional mit map, reduce und lambda-Ausdrücken | ||
| - | - als Webanwendung (mit bottle) | ||
| - | - in git-repo einchecken | ||
| - | - als installierbares Programm | ||
| - | - als getestetes Programm (mit unittest und doctests) | ||
| - | - mit einem EA-Modul ansteuern | ||
| - | - mit Anbindung an eine Datenbank | ||
| - | - mit Dokumentation | ||
| - | - als Chatbot (z.B. mit sopel https:// | ||
| - | - auf einem Cluster (mit GNU parallel) | ||
| - | - in einem UML-Aktivitätsdiagramm | ||
| - | - in einem UML-Sequenzdiagramm | ||
| - | - in einem UML-Klassendiagramm | ||
| - | - Als IOT-Anwendung mit einem Message-Broker (MQTT) | ||
| - | - Mit Kommandozeilenparametern | ||
| - | - Mit einer Konfigurationsdatei | ||
| - | - Als Web-Service mit REST-API | ||
| - | - In einer MVC-Architektur | ||
| - | - Als Spiel (mit pygame) | ||
| - | - In einem docker Container | ||
| - | - Mit Fehlerbehandlung | ||
| - | - Mit einem neuronalen Netzwerk | ||
| - | - Mit logging in ein logfile | ||
| - | - Mit einem Profiler | ||
| - | - Mit einer geplotteten Visualisierung | ||
| - | |||
| - | Mögliche Lösungen für die Katas befinden sich [[https:// | ||
| ===== Katas im Randori-Prinzip ===== | ===== Katas im Randori-Prinzip ===== | ||
| Zeile 529: | Zeile 391: | ||
| ===== Links ===== | ===== Links ===== | ||
| + | * Hinter einem [[wpde> | ||
| * [[https:// | * [[https:// | ||
| * Weitere Übungen zur OOP mit Python gibt es [[https:// | * Weitere Übungen zur OOP mit Python gibt es [[https:// | ||
| Zeile 538: | Zeile 401: | ||
| * [[Flagserver]] | * [[Flagserver]] | ||
| * [[https:// | * [[https:// | ||
| + | * Bei der [[https:// | ||
| + | |||
| + | |||
schule/programmieruebungen.1576770756.txt.gz · Zuletzt geändert: von marco.bakera
