Mittwoch, 1. Dezember 2010
Übungsbeispiele für Python (POS1: 1BHIF)
Vervollständigen Sie die folgenden Funktionsdefinitionen und schreiben Sie passende Testaufrufe.
Hier waren es die Aufrufe:
def ist_dreieck(a, b, c): """liefert True, wenn durch a, b und c ein gültiges Dreieck definiert ist""" return True def ist_quadrat(a, b, w): """liefert True, wenn durch a und b sowie dem Winkel w ein Quadrat definiert ist""" return True def ist_schaltjahr(jahr): """liefert True, wenn das gegebene Jahr ein Schaltjahr ist. Seit Ende 1582 gilt der Gregorianische Kalender, bei dem folgende Regel für die Schaltjahrbestimmung anzuwenden sind: In allen Jahren, deren Jahreszahl durch vier teilbar ist, ist der 29. Februar ein Schalttag und damit ist dieses Jahr ein Schaltjahr. Eine Ausnahme bilden allerdings die vollen Jahrhundertjahre 1700, 1800, 1900 usw., auch Säkularjahre genannt. Hiervon erhalten nur diejenigen einen Schalttag, deren Jahreszahl durch 400 teilbar ist. Jedes vierte Säkularjahr ist somit ein Schaltjahr. Für alle Jahre <= 1582 liefert die Funktion False, weil da das Schaltjahr nicht definiert ist, sonst gilt obige Regel.""" return False def fib(n): """liefert die Fibonaccizahl zu n. Die Zahlen sind wie definiert: fib(0) -> 0 fib(1) -> 1 fib(2) -> 1 fib(3) -> 2 fib(4) -> 3 fib(5) -> 5 fib(6) -> 8 ... fib(10) -> 55 ... fib(15) -> 610""" return 1 def fibtab(n): """erzeugt eine Tabelle der Fibonaccizahlen bis inclusive n. z.B. gibt fibtab(10) folgendes aus: [0, 1, 1, 2, 3, 5, 8] oder fibtab(100): [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] Hinweis: verwenden Sie als Zeilenumbruch ", " beim print, also print(wert, end=', ') außer natürlich beim letzten Wert, hier ist "]" gefordert. """ print("[0, 1, 1, 2, 3, 5, 8]") def sum_3_5(max): """ bilde Summe der Vielfachen von 3 und 5 kleiner als max. Beispielsweise liefert sum_3_5(10) 23, weil die Vielfachen von 3 < 10 sind 3 + 6 + 9 = 18 die Vielfachen von 5 < 10 sind 5 18 + 5 = 23 sum_3_5(20) liefert 78, weil 3+ 6+9+ 12+15+18=63 5+ 10+ =15 (15 ist in obiger Liste schon enthalten!) sum_3_5(25) liefert 143, weil 3+ 6+9+ 12+ 18+ 21+24=93 (Vielfache von 5 stehen darunter) 5+ 10+ 15+ 20+ =50 sum_3_5(100) liefert 2318 (ohne Beweis) """ return 23 def minquad(zahl): """finde die nächstkleinere oder gleichgroße ganze Zahl, die eine Quadratzahl ist. Beispiele: minquad(16) -> 16 (weil 4 * 4 = 16 <= 16) minquad(24) -> 16 (weil 4 * 4 = 16 <= 24) minquad(25) -> 25 (weil 5 * 5 = 25 <= 25) minquad(26) -> 25 (weil 5 * 5 = 25 <= 26) """ return zahl def dreieck(a, w): """zeichnet ein gleichseitiges Dreieck der Seitenlänge a, gedreht um den Winkel w. w = 0 bedeutet, dass die eine Seite horizional ist. w = 90 bedeutet, dass das Dreieck nach LINKS um 90° gedreht ist, d.h. eine Seite ist vertikal. Das Dreieck soll rechts neben des angegebenen Punktes gezeichnet werden. """ pass def dreieck_an_pos(a, w, x, y): """zeichnet ein Dreieck mit Hilfe der Funktion dreieck(a, w) an der Position x, y.""" passHier folgt ein Beispielaufruf für die Schaltjahrfunktion:
def test_ist_schaltjahr(): for jahr in (1000, 1581, 1582, 1900, 1999, 2003): assert not ist_schaltjahr(jahr) for jahr in (1996, 2000, 2004): assert ist_schaltjahr(jahr) print("ist_schaltjahr ok")Sollte
ist_schaltjahr()
richtig implementiert sein, dann müsste "ist_schaltjahr ok
" ausgegeben werden. Andernfalls wird das Programm bei einer der assert
-Anweisungen abgebrochen werden. assert
verwendet man als Programmierer um Bedingungen zu prüfen, die, falls sie nicht erfüllt sind, auf einen Programmierfehler hinweisen. Als Bedingung kann alles rechts neben dem assert
stehen, das True
("alles ok") oder False
liefert. Die Testaufrufe für alle Funktionen sollten dann etwa so zusammengefasst werden: def main(): """Hauptprogamm zum Testen aller Funktionen""" test_ist_dreieck() test_ist_quadrat() test_ist_schaltjahr() test_fib() test_sum_3_5() test_minquad() test_dreieck() test_dreieck_an_pos()Dieses
main()
muss natürlich auch erst aufgerufen werden (keine Einrückung): main()Wenn Sie das Programm laufen lassen, dann sieht sie Ausgabe, wenn alles funktioniert (sinngemäß) so aus:
ist_dreieck ok ist_quadrat ok ist_schaltjahr ok fib ok sum_3_5 ok minquad okDie Funktionen
test_dreieck()
sowie test_dreieck_an_pos()
bewirken eine Zeichnung der folgenden Art (je nach Aufrufe):Hier waren es die Aufrufe:
def test_dreieck(): reset() dreieck(60, 0) dreieck(60, 90) dreieck(60, -60) def test_dreieck_an_pos(): dreieck_an_pos(70, 0, 50, 50) dreieck_an_pos(70, 180, -50, -50)Es ist also "optische Kontrolle" nötig.
Labels: Aufgabe, POS1-1, Python
Abonnieren Posts [Atom]
Kommentar veröffentlichen