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-22 09:34] – [Mini-Projekte] marco.bakera | schule:programmieruebungen [2021-05-06 20:55] (aktuell) – [Links] elevator challenge: link zu py3 version pintman | ||
---|---|---|---|
Zeile 17: | Zeile 17: | ||
* [[Zahlenraten]] | * [[Zahlenraten]] | ||
* [[IBAN]] | * [[IBAN]] | ||
+ | * [[FizzBuzz Katas]] | ||
| | ||
===== Übungen zu Klassen und Objekten ===== | ===== Übungen zu Klassen und Objekten ===== | ||
Zeile 28: | Zeile 29: | ||
===== 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 64: | 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 201: | 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 223: | Zeile 257: | ||
- | # Tests | + | |
ttt = TicTacToe() | ttt = TicTacToe() | ||
Zeile 238: | 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 249: | 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 300: | Zeile 365: | ||
assert not ttt.o_wins() | assert not ttt.o_wins() | ||
+ | doctest.testmod() | ||
--></ | --></ | ||
Zeile 305: | Zeile 371: | ||
===== 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 417: | 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 426: | Zeile 401: | ||
* [[Flagserver]] | * [[Flagserver]] | ||
* [[https:// | * [[https:// | ||
+ | * Bei der [[https:// | ||
+ | |||
+ |
schule/programmieruebungen.1577003693.txt.gz · Zuletzt geändert: 2019-12-22 09:34 von marco.bakera