Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:glf23:python:funktionen [2023/11/14 18:14] – [Aufgabe 2: Funktionen mit Rückgabewert selbst schreiben] Olaf Schnürer | lehrkraefte:snr:informatik:glf23:python:funktionen [2024/12/02 12:57] (current) – [Aufgabe 1: Funktionen (mit Turtlegrafik)] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~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(" | ||
| + | print(" | ||
| + | |||
| + | def saluto(s): | ||
| + | print(" | ||
| + | |||
| + | def salutation(name, | ||
| + | if sprache == 1: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | begruessung() | ||
| + | |||
| + | saluto(" | ||
| + | saluto(" | ||
| + | |||
| + | salutation(" | ||
| + | salutation(" | ||
| + | </ | ||
| + | |||
| + | Zur Terminologie: | ||
| + | * Die Variable '' | ||
| + | * Beim Aufruf '' | ||
| + | </ | ||
| + | <hidden Motivation in der 2pG> | ||
| + | Wiederholung: | ||
| + | |||
| + | Will nun 5 Dreiecke an verschiedenen Positionen (und Startwinkeln) auf Bildschirm zeichnen. | ||
| + | Schülerin hatte Idee, einen Befehl '' | ||
| + | Dies am Computer programmiert (mit '' | ||
| + | Dann Befehl '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 1: Funktionen (mit Turtlegrafik) ==== | ||
| + | |||
| + | Erinnerung zur Turtle-Grafik: | ||
| + | |||
| + | <code python> | ||
| + | from turtle import * | ||
| + | % Hier Programmcode | ||
| + | % einfügen. | ||
| + | exitonclick() | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Öffne ein neues Python-Programm. | ||
| + | * Schreibe eine Funktion '' | ||
| + | * Teste deine Funktion, indem du die Funktion aufrufst. Hinweis: Klammern nicht vergessen beim Aufruf! | ||
| + | * Schreibe eine Funktion '' | ||
| + | * Teste mit einem Funktionsaufruf, | ||
| + | * Schreibe eine Funktion '' | ||
| + | * Teste, ob die Funktion '' | ||
| + | * Rufe nun deine drei Funktionen mehrfach hintereinander auf, eventuell mit Wechsel der Stiftdicke (z. B. '' | ||
| + | * Bonus: Du kannst auch eine while-Schleife verwenden, um beispielsweise mehrere ineinanderliegende 6-Ecke verschiedener Grössen zu zeichnen. | ||
| + | </ | ||
| + | ===== Funktionen mit Rückgabewert (= return value) ===== | ||
| + | |||
| + | ===== Erklärungen ===== | ||
| + | |||
| + | <WRAP center round info> | ||
| + | Mit dem Schlüsselwort '' | ||
| + | <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, | ||
| + | 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, | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 2: Funktionen mit Rückgabewert selbst schreiben ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Öffne ein neues Python-Programm (Name etwa '' | ||
| + | < | ||
| + | * Teste deine Funktion, etwa per '' | ||
| + | * Schreibe eine Funktion '' | ||
| + | * Teste deine Funktion, etwa per '' | ||
| + | * Schreibe eine weitere Funktion '' | ||
| + | * Teste deine Funktion. | ||
| + | * Schreibe eine weitere Funktion '' | ||
| + | * Teste deine Funktion. | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 3: Programm-Leseverständnis ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Lies die Definition der Funktion '' | ||
| + | |||
| + | Einnerung: ''< | ||
| + | |||
| + | <code python> | ||
| + | def was_berechnet_diese_funktion(n): | ||
| + | s = 0 | ||
| + | while n > 0: | ||
| + | s = s + n % 10 | ||
| + | n = n // 10 | ||
| + | return s | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== 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 " | ||
| + | Die Turtle sagt dir, dann, was du zu tun hast! | ||
| + | |||
| + | Bonus: Erweitere das Programm selbständig: | ||
| + | |||
| + | <code python tastaturgesteuerte-turtle.py> | ||
| + | from turtle import * | ||
| + | |||
| + | title(" | ||
| + | showturtle() | ||
| + | |||
| + | def vorwaerts(): | ||
| + | forward(50) | ||
| + | |||
| + | def links(): | ||
| + | left(60) | ||
| + | |||
| + | def rechts(): | ||
| + | write(' | ||
| + | |||
| + | def rueckwaerts(): | ||
| + | backward(50) | ||
| + | |||
| + | def quadrat(): | ||
| + | write(' | ||
| + | |||
| + | def polygon(): | ||
| + | n = int(textinput(" | ||
| + | a = int(textinput(" | ||
| + | write(' | ||
| + | |||
| + | # Nach den textinput-Befehlen muss man den " | ||
| + | listen() | ||
| + | |||
| + | onkey(vorwaerts, | ||
| + | # Drücken der Nach-oben-Pfeiltaste führt | ||
| + | # zum Aufruf der Funktion " | ||
| + | # (Sobald das Programm im " | ||
| + | onkey(links, | ||
| + | onkey(rechts, | ||
| + | onkey(rueckwaerts, | ||
| + | onkey(quadrat, | ||
| + | onkey(polygon, | ||
| + | onkey(exit, " | ||
| + | |||
| + | listen() | ||
| + | # Tastendrücke führen zum Ausführen | ||
| + | # der entsprechenden Funktion. | ||
| + | mainloop() # eine Art Endlosschleife, | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe 5: Primzahlen erkennen und Primzahlliste ausgeben ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | (wie immer: neues Python-Programm öffnen) | ||
| + | |||
| + | * Schreibe eine Funktion '' | ||
| + | * 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> | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Lösungsvorschlag ==== | ||
| + | |||
| + | <hidden Turtle-Programm mit den Funktionen '' | ||
| + | <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() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== W3Schools-Material zu Funktionen ===== | ||
| + | |||
| + | Erklärungen: | ||
| + | |||
| + | Übungen dazu: https:// | ||
| + | |||
| + | |||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||