Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ~~NOTOC~~ ====== Funktionen ====== ... oder Miniprogramme oder: Wie man grössere Programme übersichtlich gestaltet. ===== Erklärungen ===== <WRAP center round info> <hidden Mit der Klasse schrittweise geschriebenes Programm (im Editor und an der Tafel):> <code python funktionen-begruessung.py> def begruessung(): print("Hallo!") print("Ich bin eine Funktion.") def saluto(s): print("Buongiorno " + s + "!") def salutation(name, sprache): if sprache == 1: print("Bonjour " + name + " !") else: print("Buongiorno " + name + "!") begruessung() saluto("Pinocchio") saluto("Papagena") salutation("Pinocchio", 2) salutation("Jacques", 1) </code> Zur Terminologie: * Die Variable ''s'' in der Definition der Funktion ''saluto'' ist ein sogenannter **Parameter**. * Beim Aufruf ''saluto("Pinocchio")'' dieser Funktion ist der String ''"Pinocchio"'' das **Argument** (der übergebene Wert). </hidden> <hidden Motivation in der 2pG> Wiederholung: Dreieck zeichnen. Will nun 5 Dreiecke an verschiedenen Positionen (und Starwinkeln) auf Bildschirm zeichnen. Schülerin hatte Idee, einen Befehl ''dreieck'' zu bauen. Dies am Computer programmiert (mit ''setposition''). Frage nach ''penup'', ''pendown'' kam auf. Dann Befehl ''stift(farbe, dicke)'' programmiert (so habe gleich Parameter bzw. Argumente im Aufruf). </hidden> </WRAP> ==== Aufgabe 1: Funktionen (mit Turtlegrafik) ==== Erinnerung zur Turtle-Grafik: Das Grundgerüst eines Turtle-Programms sieht wie folgt aus. <code python> from turtle import * % Hier Programmcode % einfügen. exitonclick() </code> <WRAP center round todo> Öffne ein neues Python-Programm. * Schreibe eine Funktion ''dreieck''. Wenn man diese Funktion aufruft, soll die Turtle ein gleichseitiges Dreieck der Seitenlänge 100 zeichnen. * Teste deine Funktion, indem du die Funktion aufrufst. Hinweis: Klammern nicht vergessen beim Aufruf! * Schreibe eine Funktion ''triangolo'' mit einem Parameter ''a''. Wenn man diese Funktion aufruft, soll die Turtle ein gleichseitiges Dreieck der Seitenlänge ''a'' zeichnen. * Teste mit einem Funktionsaufruf, ob die Funktion ''triangolo'' das Gewünschte tut. * Schreibe eine Funktion ''vieleck'' mit **zwei** Parameter ''a'' und ''n''. Wenn man diese Funktion aufruft, soll die Turtle ein reguläres $n$-Eck der Seitenlänge ''a'' zeichnen. * Teste, ob die Funktion ''vieleck'' das Gewünschte tut. * Rufe nun deine drei Funktionen mehrfach hintereinander auf, eventuell mit Wechsel der Stiftdicke (z. B. ''pensize(10)'') oder Wechsel der Zeichenfarbe (z. B. ''pencolor("blue")''). * Bonus: Du kannst auch eine while-Schleife verwenden, um beispielsweise mehrere ineinanderliegende 6-Ecke verschiedener Grössen zu zeichnen. </WRAP> ===== Funktionen mit Rückgabewert (= return value) ===== ===== Erklärungen ===== <WRAP center round info> Mit dem Schlüsselwort ''return'' erreicht man, dass eine Funktion einen Wert retourniert. Beachte: Sobald in der Definition einer Funktion ein Return-Befehl erreicht wird, wird die Ausführung der Funktion beendet. <code python funktionen-mit-rueckgabewert.py> def wurzel(n): return n ** 0.5 def betrag(x): if x >= 0: return x else: return -x def ist_durch_drei_teilbar(n): return n % 3 == 0 def arithmetisches_mittel(a, b): return (a + b) / 2 print(wurzel(2)) print(wurzel(3)) print(betrag(3)) print(betrag(-5)) print(ist_durch_drei_teilbar(111)) print(ist_durch_drei_teilbar(112)) print(arithmetisches_mittel(10, 100)) </code> </WRAP> ===== Aufgabe 2: Funktionen mit Rückgabewert selbst schreiben ===== <WRAP center round todo> Öffne ein neues Python-Programm (Name etwa ''aufgabe-funktionen-mit-rueckgabewert.py''). <!-- * Schreibe eine Funktion ''hoch2'', die die zweite Potenz einer Zahl berechnet. Z. B. soll der Funktionsaufruf ''hoch2(9)'' die Zahl $9^{2}=81$ liefern. * Teste deine Funktion, etwa per ''print(hoch2(9))''.--> * Schreibe eine Funktion ''zwei_hoch'', die 2 in die gewünschte Potenz erhebt. Z. B. soll der Funktionsaufruf ''zwei_hoch(10)'' die Zahl $2^{10}=1024$ liefern. * Teste deine Funktion, etwa per ''print(zwei_hoch(10))''. Bonus: Gib mit einer Schleife die ersten 10 Zweierpotenzen $2^0, 2^1, \dots, 2^{10}$ aus. * Schreibe eine weitere Funktion ''geometrisches_mittel'', die das geometrische Mittel $\sqrt{a \cdot b}$ zweier nicht-negativer Zahlen berechnet. Z. B. soll der Funktionsaufruf ''geometrisches_mittel(4, 9)'' die Zahl $6$ liefern. * Teste deine Funktion. * Schreibe eine weitere Funktion ''minimum'', die das Minimum (= die kleinere) zweier Zahlen berechnet. Z. B. soll der Funktionsaufruf ''minimum(-3, -5)'' die Zahl $-5$ liefern. * Teste deine Funktion. </WRAP> ===== Aufgabe 3: Programm-Leseverständnis ===== <WRAP center round todo> Lies die Definition der Funktion ''was_berechnet_diese Funktion'' und finde (möglichst ohne Computereinsatz) heraus, was sie berechnet! Einnerung: ''<nowiki>//</nowiki>'' und ''%'' berechnen Wert (= Ganzzahlquotient) und Rest der ganzzahligen Division. <code python> def was_berechnet_diese_funktion(n): s = 0 while n > 0: s = s + n % 10 n = n // 10 return s </code> </WRAP> ====== Bonus-Aufgaben ====== Wer mehr Lust auf Primzahlen als auf Turtle-Grafik hat, bearbeite zuerst Aufgabe 5. ===== Aufgabe 4: Tastaturgesteuerte Turtle - eine Art Zeichenprogramm ===== <WRAP center round todo> Lass das folgende Programm laufen und steuere die Turtle mit den vier Pfeiltasten und den Tasten "p" und "q". Die Turtle sagt dir, dann, was du zu tun hast! Bonus: Erweitere das Programm selbständig: Etwa Farbwechsel, Ändern der Liniendicke, Anheben des Zeichenstifts etc. bei entsprechenden Tastendrücken. <code python tastaturgesteuerte-turtle.py> from turtle import * title("Turtle-Zeichenprogamm: Verwende die Pfeiltasten, p, q und Escape") showturtle() def vorwaerts(): forward(50) def links(): left(60) def rechts(): write('Bitte Code ändern, so dass die Turtle um 60 Grad nach rechts abbiegt.') def rueckwaerts(): backward(50) def quadrat(): write('Bitte Code ändern, so dass ein Quadrat gezeichnet wird.') def polygon(): n = int(textinput("Polygon", "Anzahl der Ecken: ")) a = int(textinput("Polygon", "Länge der Seiten: ")) write('Bitte Code ändern, so dass ein regelmässiges n-Eck der Seitenlänge a gezeichnet wird.') # Nach den textinput-Befehlen muss man den "listener" wieder aktivieren. listen() onkey(vorwaerts, "Up") # Drücken der Nach-oben-Pfeiltaste führt # zum Aufruf der Funktion "vorwaerts". # (Sobald das Programm im "listen"-Modus ist.) onkey(links, "Left") onkey(rechts, "Right") onkey(rueckwaerts, "Down") onkey(quadrat, "q") onkey(polygon, "p") onkey(exit, "Escape") listen() # Aktiviert den listener-Modus: # Tastendrücke führen zum Ausführen # der entsprechenden Funktion. mainloop() # eine Art Endlosschleife, die auf Tastatureingaben wartet. </code> </WRAP> ===== Aufgabe 5: Primzahlen erkennen und Primzahlliste ausgeben ===== <WRAP center round todo> (wie immer: neues Python-Programm öffnen) * Schreibe eine Funktion ''ist_prim'' mit einem Parameter ''n'', die ''True'' oder ''False'' liefert abhängig davon, ob das Argument eine Primzahl ist. Z. B. soll ''ist_prim(5)'' den Wert ''True'' liefern. * Teste deine Funktion mit **allen** Zahlen zwischen 1 und 10. (Beachte: 1 ist keine Primzahl). * Nutze diese Funktion, um eine Liste aller Primzahlen bis 1000 auszugeben. Falls du die Primzahlen nebeneinander (statt untereinander) ausgeben möchtest: Verwende <code python>print(..., end=", ")</code> Dies sorgt dafür, dass nach der Ausgabe ein Kommazeichen und ein Leerzeichen folgt und **nicht** in eine neue Zeile gewechselt wird. </WRAP> ==== Lösungsvorschlag ==== <hidden Turtle-Programm mit den Funktionen ''dreieck'', ''triangolo'' und ''vieleck''> <code python funktionen-turtle.py> from turtle import * def dreieck(): i = 0 while i < 3: forward(100) left(120) i = i + 1 def triangolo(a): i = 0 while i < 3: forward(a) left(120) i = i + 1 def vieleck(a, n): i = 0 while i < n: forward(a) left(360/n) i = i + 1 dreieck() triangolo(123) triangolo(200) vieleck(77, 5) vieleck(27, 11) exitonclick() </code> </hidden> ===== W3Schools-Material zu Funktionen ===== Erklärungen: https://www.w3schools.com/python/python_functions.asp. Übungen dazu: https://www.w3schools.com/python/exercise.asp?filename=exercise_functions1 ===== Link zur Kursseite ===== [[lehrkraefte:snr:informatik:glf23|Zur Kursseite]] lehrkraefte/snr/informatik/glf23/python/funktionen.txt Last modified: 2023/11/15 10:11by Olaf Schnürer