Benutzer-Werkzeuge

Webseiten-Werkzeuge


schule:programmieruebungen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
schule:programmieruebungen [2019-12-22 09:42] – fizz buzz katas in eigenen artikel marco.bakeraschule:programmieruebungen [2021-05-06 20:55] (aktuell) – [Links] elevator challenge: link zu py3 version pintman
Zeile 29: Zeile 29:
 ===== Schlechter Stil ===== ===== Schlechter Stil =====
  
-Welche stilistischen Probleme erkennst du bei der folgenden Funktion?+Welche stilistischen Probleme erkennst du bei der folgenden Funktion? Nenne möglichst viele 
 +Probleme.
  
 <code python> <code python>
Zeile 65: Zeile 66:
 --></html> --></html>
    
-===== Verschiedene Laufzeiten =====+===== Testgetriebene Entwicklung (TDD) ===== 
 + 
 +→ [[Testgetriebene Entwicklung (Übung)]] 
 + 
 + 
 +===== Unterschiedliche Laufzeiten =====
  
 Erstelle die Funktionen, linear(n), quadratic(n), cubic(n), exponential(n), die in Abhängigkeit von n eine lineare, quadratische, kubische oder exponentielle Laufzeit haben. Erstelle die Funktionen, linear(n), quadratic(n), cubic(n), exponential(n), die in Abhängigkeit von n eine lineare, quadratische, kubische oder exponentielle Laufzeit haben.
Zeile 202: Zeile 208:
  
 <file python ttt.py> <file python ttt.py>
 +'''
 +Auf diese Art kann die Klasse verwendet werden:
 +
 +>>> ttt = TicTacToe()
 +>>> ttt.stones
 +{}
 +>>> ttt.place_x_at(1,1)
 +>>> ttt.place_o_at(0,0)
 +>>> ttt.stones
 +{(1, 1): 'x', (0, 0): 'o'}
 +>>> ttt.x_wins()
 +False
 +>>> ttt.o_wins()
 +False
 +>>> ttt.place_x_at(0,1)
 +>>> ttt.place_o_at(1,0)
 +>>> ttt.place_x_at(2,1)
 +>>> ttt.x_wins()
 +True
 +>>> ttt.o_wins()
 +False
 +>>> ttt.stones
 +{(1, 1): 'x', (0, 0): 'o', (0, 1): 'x', (1, 0): 'o', (2, 1): 'x'}
 +'''
 +
 +import doctest
 +
 class TicTacToe: class TicTacToe:
     'A game of tic tac toe.'     'A game of tic tac toe.'
Zeile 224: Zeile 257:
  
  
-# Tests+
  
 ttt = TicTacToe() ttt = TicTacToe()
Zeile 239: Zeile 272:
 assert ttt.x_wins() assert ttt.x_wins()
 assert not ttt.o_wins() assert not ttt.o_wins()
 +
 +doctest.testmod()  # running tests from class documentation
 </file> </file>
  
 <html><!-- <html><!--
 +'''
 +Auf diese Art kann die Klasse verwendet werden:
 +
 +>>> ttt = TicTacToe()
 +>>> ttt.stones
 +{}
 +>>> ttt.place_x_at(1,1)
 +>>> ttt.place_o_at(0,0)
 +>>> ttt.stones
 +{(1, 1): 'x', (0, 0): 'o'}
 +>>> ttt.x_wins()
 +False
 +>>> ttt.o_wins()
 +False
 +>>> ttt.place_x_at(0,1)
 +>>> ttt.place_o_at(1,0)
 +>>> ttt.place_x_at(2,1)
 +>>> ttt.x_wins()
 +True
 +>>> ttt.o_wins()
 +False
 +>>> ttt.stones
 +{(1, 1): 'x', (0, 0): 'o', (0, 1): 'x', (1, 0): 'o', (2, 1): 'x'}
 +'''
 +
 +import doctest
 +
 class TicTacToe: class TicTacToe:
     'A game of tic tac toe.'     'A game of tic tac toe.'
Zeile 250: Zeile 312:
  
     def place_x_at(self, x, y):     def place_x_at(self, x, y):
 +        assert 0 <= x <= 2 and 0 <= y <= 2
         self.stones[(x, y)] = "x"         self.stones[(x, y)] = "x"
  
     def place_o_at(self, x, y):     def place_o_at(self, x, y):
 +        assert 0 <= x <= 2 and 0 <= y <= 2
         self.stones[(x, y)] = "o"         self.stones[(x, y)] = "o"
  
Zeile 301: Zeile 365:
 assert not ttt.o_wins() assert not ttt.o_wins()
  
 +doctest.testmod()  # running tests from class documentation
 --></html> --></html>
  
Zeile 306: Zeile 371:
 ===== Programm, das den eigenen Quelltext ausgibt ===== ===== Programm, das den eigenen Quelltext ausgibt =====
  
-Schreibe ein Programm, das den eigenen Quelltext ausgibt. Dabei darf nicht auf Dateioperationen zurückgegriffen werden. Sonst wäre es zu einfach. Dann könnte man einfach nur die Datei ausgeben, die den Quelltext enthält.+→ [[Eigenen Quelltext ausgeben]]
  
-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, das den eigenen Quelltext ausgibt. 
- 
-Wenn du keinen Ansatz findest, kann du den (unvollständigen) Quelltext aus der Fußnote(( 
-<code python> 
-source = [ 
-    'print("source = [")', 
-    ... 
-] 
- 
-print("source = [") 
-for line in source:   
-    print(line, ",") 
-... 
- 
-</code> 
-)) nutzen. 
  
 ===== Katas im Randori-Prinzip ===== ===== Katas im Randori-Prinzip =====
Zeile 343: Zeile 391:
 ===== Links ===== ===== Links =====
  
 +  * Hinter einem [[wpde>Kata (Programmierung)|Kata]] verbirgt sich in der Programmierung eine kleine, abgeschlossene Übung. [[http://codekata.com/|CodeKata]] versammelt eine Reihe interessanter Übungen.
   * [[https://www.practicepython.org/|Practice Python]] enthält verschiedene Übungen für Anfänger.   * [[https://www.practicepython.org/|Practice Python]] enthält verschiedene Übungen für Anfänger.
   * Weitere Übungen zur OOP mit Python gibt es [[https://www.inf-schule.de/modellierung/ooppython/bank/objekteklassen/uebungen|hier]].   * Weitere Übungen zur OOP mit Python gibt es [[https://www.inf-schule.de/modellierung/ooppython/bank/objekteklassen/uebungen|hier]].
Zeile 352: Zeile 401:
   * [[Flagserver]]   * [[Flagserver]]
   * [[https://blog.bakera.de/ein-programm-das-den-eigenen-quelltext-ausgibt.html|Programm, welches den eigenen Quelltext ausgibt]]   * [[https://blog.bakera.de/ein-programm-das-den-eigenen-quelltext-ausgibt.html|Programm, welches den eigenen Quelltext ausgibt]]
 +  * Bei der [[https://github.com/pintman/python-elevator-challenge|Python Elevator Challenge]] muss ein Aufzug in [[Python]] programmiert werden.
 +
 +
schule/programmieruebungen.1577004147.txt.gz · Zuletzt geändert: 2019-12-22 09:42 von marco.bakera