Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:funktionen [2026-04-07 07:58] – [Aufgabe E5] hof | gf_informatik:funktionen [2026-04-28 20:19] (aktuell) – [Aufgabe F6 (optional)] hof | ||
|---|---|---|---|
| Zeile 39: | Zeile 39: | ||
| Die Funktion gibt einfach "Hallo du!" aus, wenn sie aufgerufen wird. Die ersten beiden Zeilen definieren die Funktion. Unten wird sie zweimal aufgerufen, dementsprechend wird 2x "Hallo du!" ausgegeben. | Die Funktion gibt einfach "Hallo du!" aus, wenn sie aufgerufen wird. Die ersten beiden Zeilen definieren die Funktion. Unten wird sie zweimal aufgerufen, dementsprechend wird 2x "Hallo du!" ausgegeben. | ||
| - | < | + | < |
| - | < | + | |
| def say_hi(): | def say_hi(): | ||
| print(" | print(" | ||
| Zeile 46: | Zeile 45: | ||
| say_hi() | say_hi() | ||
| say_hi() | say_hi() | ||
| - | </ | + | </ |
| === Beispiel 2: Funktion mit Parameter und ohne Rückgabewert === | === Beispiel 2: Funktion mit Parameter und ohne Rückgabewert === | ||
| Zeile 54: | Zeile 53: | ||
| Beim ersten Funktionsaufruf unten hat `name` also den Wert `" | Beim ersten Funktionsaufruf unten hat `name` also den Wert `" | ||
| - | < | + | < |
| def say_hi(name): | def say_hi(name): | ||
| print(f" | print(f" | ||
| Zeile 60: | Zeile 59: | ||
| say_hi(" | say_hi(" | ||
| say_hi(" | say_hi(" | ||
| - | </ | + | </ |
| === Beispiel 3: Funktion ohne Parameter aber mit Rückgabewert === | === Beispiel 3: Funktion ohne Parameter aber mit Rückgabewert === | ||
| In einem Glücksspiel wollen wir oft einen Würfelwurf simulieren. Dazu wollen wir eine Würfelfunktion `wuerfle()` programmieren, | In einem Glücksspiel wollen wir oft einen Würfelwurf simulieren. Dazu wollen wir eine Würfelfunktion `wuerfle()` programmieren, | ||
| - | < | + | < |
| import random | import random | ||
| Zeile 75: | Zeile 74: | ||
| print(wuerfle()) | print(wuerfle()) | ||
| print(wuerfle()) | print(wuerfle()) | ||
| - | </ | + | </ |
| === Beispiel 4: Funktion mit Parameter und mit Rückgabewert === | === Beispiel 4: Funktion mit Parameter und mit Rückgabewert === | ||
| Nun wollen wir auch andere Würfel (z.B. 12er-Würfel) simulieren können. Dazu führen wir einen Parameter ein, der den maximalen Wert des Würfels festlegt: | Nun wollen wir auch andere Würfel (z.B. 12er-Würfel) simulieren können. Dazu führen wir einen Parameter ein, der den maximalen Wert des Würfels festlegt: | ||
| - | < | + | < |
| import random | import random | ||
| Zeile 90: | Zeile 89: | ||
| print(wuerfle(12)) | print(wuerfle(12)) | ||
| print(wuerfle(12)) | print(wuerfle(12)) | ||
| - | </ | + | </ |
| In Realität ist es aber so, dass die meisten Würfel bis $6$ gehen. Wir können nun unser Leben einfacher machen, indem wir den Parameter `max_nr` mit einem **Vorgabewert** ausstatten: | In Realität ist es aber so, dass die meisten Würfel bis $6$ gehen. Wir können nun unser Leben einfacher machen, indem wir den Parameter `max_nr` mit einem **Vorgabewert** ausstatten: | ||
| - | < | + | < |
| import random | import random | ||
| Zeile 103: | Zeile 102: | ||
| print(wuerfle(12)) # 12er-Wuerfel | print(wuerfle(12)) # 12er-Wuerfel | ||
| print(wuerfle()) | print(wuerfle()) | ||
| - | </ | + | </ |
| Der erste Funktionsaufruf simuliert natürlich einen 12er-Würfel. Der zweite einen 6er-Würfel: | Der erste Funktionsaufruf simuliert natürlich einen 12er-Würfel. Der zweite einen 6er-Würfel: | ||
| Zeile 120: | Zeile 119: | ||
| === Aufgabe E1 === | === Aufgabe E1 === | ||
| - | **Nette Begrüssung: | + | < |
| - | + | <div slot=" | |
| - | === Aufgabe E2 === | + | <b>Nette Begrüssung: |
| - | + | </div> | |
| - | Schreibe eine Funktion `head_or_tail()`, | + | <template data-type=" |
| - | + | ||
| - | <nodisp 1> | + | |
| - | ++++Tipps: | + | |
| - | Erzeuge mithilfe des `random`-Moduls eine [[gf_informatik: | + | |
| - | + | ||
| - | + | ||
| - | Simuliere nun 20 Münzenwürfe. | + | |
| - | + | ||
| - | ++++ | + | |
| - | </nodisp> | + | |
| - | + | ||
| - | + | ||
| - | === Aufgabe E3 === | + | |
| - | + | ||
| - | Schreibe eine Funktion `fortune_cookie()`, | + | |
| - | + | ||
| - | Rufe die Funktion auf. | + | |
| - | + | ||
| - | <nodisp 1> | + | |
| - | ++++Tipps: | + | |
| - | Ähnlich wie Münzwurf-Funktion oben. Bestimme wieder eine Zufallszahl (z.B. im Bereich $1-5$, falls du fünf Sprüche hast). Falls die Zufallszahl $2$ ist, gibst du den zweiten Spruch aus. Verwende dazu eine if-elif-...-else-Verzweigung. | + | |
| - | ++++ | + | |
| - | </ | + | |
| - | + | ||
| - | === Aufgabe E4 === | + | |
| - | + | ||
| - | TurtleGraphics: | + | |
| - | + | ||
| - | === Aufgabe E5 === | + | |
| - | + | ||
| - | Schreibe folgende Funktionen: | + | |
| - | * `square(x, | + | |
| - | * `circle(x, | + | |
| - | * `rectange(x, | + | |
| - | * `triangle(x, | + | |
| - | * Funktion für selbst gewählte geometrische Figur | + | |
| - | + | ||
| - | Mache nun moderne Kunst, indem du diese Funktionen aufrufst. | + | |
| - | + | ||
| - | **Challenge (optional): | + | |
| - | + | ||
| - | Vom Zufall abhängen können z.B. folgende Werte: | + | |
| - | * Anzahl, wie oft jede Funktion aufgerufen wird. | + | |
| - | * Position von Figuren | + | |
| - | * Grössen von Figuren | + | |
| - | * Drehung von Figuren | + | |
| - | * Farben (Stift- und Füllfarbe), | + | |
| - | + | ||
| - | Tipps: | + | |
| - | * Es lohnt sich, z.B. eine Funktion `draw_random_shape()` zu definieren, die dann zufällig eine der Formen zeichnet. | + | |
| - | * Du kannst auch weitere Funktionen definieren, die dir das Leben erleichtern. | + | |
| - | + | ||
| - | <nodisp 1> | + | |
| - | ++++Lösungen Aufgaben E| | + | |
| - | + | ||
| - | ==== Aufgaben E ==== | + | |
| - | + | ||
| - | === Aufgabe E1 === | + | |
| - | + | ||
| - | < | + | |
| def greetings(name, | def greetings(name, | ||
| print(f" | print(f" | ||
| Zeile 190: | Zeile 129: | ||
| greetings(" | greetings(" | ||
| greetings(" | greetings(" | ||
| - | </bottom-editor></html> | + | </template> |
| + | </bottom-exercise> | ||
| === Aufgabe E2 === | === Aufgabe E2 === | ||
| - | <html><bottom-editor> | + | <bottom-exercise id=" |
| + | <div slot=" | ||
| + | Schreibe eine Funktion < | ||
| + | </ | ||
| + | < | ||
| import random | import random | ||
| Zeile 210: | Zeile 154: | ||
| head_or_tail() | head_or_tail() | ||
| head_or_tail() | head_or_tail() | ||
| - | </ | + | </ |
| + | </ | ||
| + | |||
| + | <nodisp 1> | ||
| + | ++++Tipps: | ||
| + | Erzeuge mithilfe des `random`-Moduls eine [[gf_informatik: | ||
| + | |||
| + | Simuliere nun 20 Münzenwürfe. | ||
| + | ++++ | ||
| + | </nodisp> | ||
| === Aufgabe E3 === | === Aufgabe E3 === | ||
| - | <html><bottom-editor> | + | <bottom-exercise id=" |
| + | <div slot=" | ||
| + | Schreibe eine Funktion < | ||
| + | <p> | ||
| + | Rufe die Funktion auf. | ||
| + | </ | ||
| + | < | ||
| import random | import random | ||
| Zeile 227: | Zeile 187: | ||
| fortune_cookie() | fortune_cookie() | ||
| - | </ | + | </ |
| + | </ | ||
| + | |||
| + | <nodisp 1> | ||
| + | ++++Tipps: | ||
| + | Ähnlich wie Münzwurf-Funktion oben. Bestimme wieder eine Zufallszahl (z.B. im Bereich $1-5$, falls du fünf Sprüche hast). Falls die Zufallszahl $2$ ist, gibst du den zweiten Spruch aus. Verwende dazu eine if-elif-...-else-Verzweigung. | ||
| + | ++++ | ||
| + | </nodisp> | ||
| === Aufgabe E4 === | === Aufgabe E4 === | ||
| - | < | + | <bottom-exercise id=" |
| + | <div slot=" | ||
| + | TurtleGraphics: | ||
| + | </ | ||
| + | < | ||
| from turtle import * | from turtle import * | ||
| turi = Turtle() | turi = Turtle() | ||
| Zeile 248: | Zeile 219: | ||
| square(150) | square(150) | ||
| square(200) | square(200) | ||
| - | </bottom-editor></html> | + | </template> |
| + | </bottom-exercise> | ||
| === Aufgabe E5 === | === Aufgabe E5 === | ||
| - | < | + | <bottom-exercise id=" |
| - | from turtle import * | + | <div slot=" |
| - | t = Turtle() | + | Schreibe folgende Funktionen: |
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| - | def square(x,y,l): | + | < |
| - | t.teleport(x, | + | |
| - | i = 0 | + | |
| - | while i < 4: | + | |
| - | t.fd(l) | + | |
| - | t.right(90) | + | |
| - | i = i + 1 | + | |
| - | def circle(x, | + | < |
| - | t.teleport(x, | + | <ul> |
| - | t.circle(r) | + | < |
| - | + | < | |
| - | def rectangle(x,y,a,b): | + | |
| - | t.teleport(x, | + | < |
| - | i = 0 | + | < |
| - | while i < 2: | + | </ul> |
| - | | + | Tipps: |
| - | | + | <ul> |
| - | | + | |
| - | | + | < |
| - | i = i + 1 | + | </ul> |
| - | + | </div> | |
| - | def triangle(x, | + | <template data-type="solution"> |
| - | | + | |
| - | i = 0 | + | |
| - | while i < 3: | + | |
| - | t.fd(l) | + | |
| - | t.right(120) | + | |
| - | i = i + 1 | + | |
| - | + | ||
| - | square(-200,-300,150) | + | |
| - | circle(0,150,40) | + | |
| - | rectangle(-150, | + | |
| - | triangle(100, | + | |
| - | </bottom-editor></html> | + | |
| - | + | ||
| - | < | + | |
| import random | import random | ||
| from turtle import * | from turtle import * | ||
| - | def square(t,x,y,l): | + | def square(t, |
| - | t.teleport(x, | + | |
| i = 0 | i = 0 | ||
| while i < 4: | while i < 4: | ||
| Zeile 304: | Zeile 263: | ||
| i = i + 1 | i = i + 1 | ||
| - | def circle(t,x,y,r): | + | def circle(t, |
| - | t.teleport(x, | + | |
| t.circle(r) | t.circle(r) | ||
| - | def rectangle(t,x,y,a,b): | + | def rectangle(t, |
| - | t.teleport(x, | + | |
| i = 0 | i = 0 | ||
| while i < 2: | while i < 2: | ||
| Zeile 318: | Zeile 275: | ||
| i = i + 1 | i = i + 1 | ||
| - | def triangle(t,x,y,l): | + | def triangle(t, |
| - | t.teleport(x, | + | |
| i = 0 | i = 0 | ||
| while i < 3: | while i < 3: | ||
| Zeile 345: | Zeile 301: | ||
| x = random.randint(-180, | x = random.randint(-180, | ||
| y = random.randint(-180, | y = random.randint(-180, | ||
| + | t.teleport(x, | ||
| side1 = random.randint(20, | side1 = random.randint(20, | ||
| t.fillcolor(random_color(True)) | t.fillcolor(random_color(True)) | ||
| Zeile 350: | Zeile 307: | ||
| t.begin_fill() | t.begin_fill() | ||
| if shape == 1: | if shape == 1: | ||
| - | square(t, x, y, side1) | + | square(t, side1) |
| elif shape == 2: | elif shape == 2: | ||
| - | circle(t, x, y, side1) | + | circle(t, side1) |
| elif shape == 3: | elif shape == 3: | ||
| - | triangle(t, x, y, side1) | + | triangle(t, side1) |
| elif shape == 4: | elif shape == 4: | ||
| side2 = random.randint(20, | side2 = random.randint(20, | ||
| - | rectangle(t, x, y, side1, side2) | + | rectangle(t, |
| t.end_fill() | t.end_fill() | ||
| Zeile 365: | Zeile 322: | ||
| artist(t) | artist(t) | ||
| - | </bottom-editor></ | + | </template> |
| - | + | </bottom-exercise> | |
| - | ++++ | + | |
| - | </nodisp> | + | |
| ==== Aufgaben F ==== | ==== Aufgaben F ==== | ||
| Zeile 383: | Zeile 338: | ||
| === Aufgabe F1 === | === Aufgabe F1 === | ||
| - | Definiere eine Funktion mit einem Argument `volume_cube(x)`, | + | < |
| + | <div slot=" | ||
| + | Schreibe folgende Funktionen: | ||
| - | Welches | + | < |
| - | === Aufgabe F2 === | + | < |
| - | + | </div> | |
| - | **Satz von Pythagoras: | + | <template data-type=" |
| - | + | ||
| - | //Tipp:// Die Wurzel einer Zahl ziehst du mit `sqrt(x)`, dazu musst du aber zuerst das math-Modul importieren: | + | |
| - | + | ||
| - | // | + | |
| - | + | ||
| - | + | ||
| - | === Aufgabe F3 === | + | |
| - | + | ||
| - | Das Volumen | + | |
| - | Definiere eine Funktion `volume_sphere(...)`, | + | |
| - | + | ||
| - | === Aufgabe F4 === | + | |
| - | + | ||
| - | Schreibe eine Funktion `grade(points)`, | + | |
| - | $$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$ | + | |
| - | + | ||
| - | Beachte: | + | |
| - | * Um die Noten schön zu runden, kannst du die // | + | |
| - | * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten. | + | |
| - | + | ||
| - | === Aufgabe F5 === | + | |
| - | + | ||
| - | Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$. | + | |
| - | + | ||
| - | Schreibe eine Funktion `factorial(...)`, | + | |
| - | + | ||
| - | **optionale Challenge für absolute Freaks**: Kannst du die Fakultät ganz ohne Schleife berechnen? Dann hast du das Prinzip der *Rekursion* (Selbst-Aufruf) entdeckt! | + | |
| - | + | ||
| - | === Aufgabe F6 (optional) === | + | |
| - | + | ||
| - | **Mitternachtsformel: | + | |
| - | $$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$ | + | |
| - | + | ||
| - | Schreibe eine Funktion `mitternachtsformel(...)`, | + | |
| - | * keine Lösung: gib `None` zurück, dies ist der Fall, wenn der Term in der Wurzel negativ ist | + | |
| - | * eine Lösung, dies ist der Fall, wenn der Term in der Wurzel genau 0 ist | + | |
| - | * zwei Lösungen: gib beide Werte (mit Komma getrennt) zurück | + | |
| - | + | ||
| - | Tipp: Verwende die Diskriminante, | + | |
| - | + | ||
| - | Kontrolle: Die quadratische Gleichung ... | + | |
| - | + | ||
| - | * $3 x^2 - 6 x - 5 = 0$ hat die zwei Lösungen: $-0.632993$ und $2.63299$ | + | |
| - | * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$ | + | |
| - | * $x^2 + 2 x + 7 = 0$ hat keine Lösung | + | |
| - | + | ||
| - | <nodisp 1> | + | |
| - | + | ||
| - | ++++Lösungen Aufgaben F| | + | |
| - | + | ||
| - | ==== Aufgaben F ==== | + | |
| - | + | ||
| - | === Aufgabe F1 === | + | |
| - | + | ||
| - | < | + | |
| def volume_cube(x): | def volume_cube(x): | ||
| return x**3 | return x**3 | ||
| Zeile 450: | Zeile 352: | ||
| v = volume_cube(13) | v = volume_cube(13) | ||
| print(v) | print(v) | ||
| - | </bottom-editor></html> | + | </template> |
| + | < | ||
| + | assert volume_cube(13) == 2197 | ||
| + | assert volume_cube(4) == 64 | ||
| + | </template> | ||
| + | </ | ||
| === Aufgabe F2 === | === Aufgabe F2 === | ||
| - | <html><bottom-editor> | + | <bottom-exercise id=" |
| + | <div slot=" | ||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | </ | ||
| + | < | ||
| import math | import math | ||
| def pythagoras(a, | def pythagoras(a, | ||
| Zeile 460: | Zeile 375: | ||
| print(pythagoras(3, | print(pythagoras(3, | ||
| - | </bottom-editor></html> | + | </template> |
| + | < | ||
| + | assert pythagoras(3, | ||
| + | assert pythagoras(8, | ||
| + | </template> | ||
| + | </ | ||
| === Aufgabe F3 === | === Aufgabe F3 === | ||
| - | <html><bottom-editor> | + | Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ |
| + | <bottom-exercise id=" | ||
| + | <div slot=" | ||
| + | Definiere eine Funktion < | ||
| + | </ | ||
| + | < | ||
| import math | import math | ||
| def volume_sphere(r): | def volume_sphere(r): | ||
| Zeile 471: | Zeile 395: | ||
| print(volume_sphere(3)) | print(volume_sphere(3)) | ||
| - | </bottom-editor></html> | + | </template> |
| + | < | ||
| + | assert 113.09 < volume_sphere(3) < 113.099 | ||
| + | </template> | ||
| + | </ | ||
| === Aufgabe F4 === | === Aufgabe F4 === | ||
| - | <html><bottom-editor> | + | Schreibe eine Funktion `grade(points)`, |
| + | $$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$ | ||
| + | |||
| + | Beachte: | ||
| + | * Um die Noten schön zu runden, kannst du die // | ||
| + | * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten. | ||
| + | |||
| + | <bottom-exercise id=" | ||
| + | <template data-type=" | ||
| def grade(points, | def grade(points, | ||
| gr = 5*points/ | gr = 5*points/ | ||
| Zeile 484: | Zeile 419: | ||
| print(grade(23, | print(grade(23, | ||
| - | </bottom-editor></html> | + | </template> |
| + | </bottom-exercise> | ||
| === Aufgabe F5 === | === Aufgabe F5 === | ||
| - | <html><bottom-editor> | + | Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Sie wird mit einem Ausrufezeichen geschrieben. Als Beispiel: $5!=1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 =120$. |
| + | |||
| + | <bottom-exercise id=" | ||
| + | <div slot=" | ||
| + | Schreibe eine Funktion < | ||
| + | |||
| + | < | ||
| + | </ | ||
| + | < | ||
| def factorial(n): | def factorial(n): | ||
| product = 1 | product = 1 | ||
| Zeile 499: | Zeile 442: | ||
| print(factorial(5)) | print(factorial(5)) | ||
| - | </bottom-editor></html> | + | </template> |
| + | < | ||
| + | assert factorial(5) == 120 | ||
| + | assert factorial(10) == 3628800 | ||
| + | </template> | ||
| + | </ | ||
| + | === Aufgabe F6 (optional) === | ||
| - | === Aufgabe F6 === | + | **Mitternachtsformel: |
| + | $$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$$ | ||
| + | |||
| + | Schreibe eine Funktion `mitternachtsformel(...)`, | ||
| + | * keine Lösung: gib `None` zurück, dies ist der Fall, wenn der Term in der Wurzel negativ ist | ||
| + | * eine Lösung, dies ist der Fall, wenn der Term in der Wurzel genau 0 ist | ||
| + | * zwei Lösungen: gib beide Werte (mit Komma getrennt) zurück | ||
| + | |||
| + | Tipp: Verwende die Diskriminante, | ||
| + | |||
| + | Kontrolle: Die quadratische Gleichung ... | ||
| + | |||
| + | * $3 x^2 - 6 x - 5 = 0$ hat die zwei Lösungen: $-0.632993$ und $2.63299$ | ||
| + | * $x^2 - 4 x + 4 = 0$ hat eine Lösung: $2$ | ||
| + | * $x^2 + 2 x + 7 = 0$ hat keine Lösung | ||
| - | <html><bottom-editor> | + | <bottom-exercise id=" |
| + | <template data-type=" | ||
| from math import * | from math import * | ||
| def mitternachtsformel(a, | def mitternachtsformel(a, | ||
| Zeile 519: | Zeile 483: | ||
| print(mitternachtsformel(1, | print(mitternachtsformel(1, | ||
| print(mitternachtsformel(1, | print(mitternachtsformel(1, | ||
| - | </bottom-editor></html> | + | </template> |
| + | < | ||
| + | assert set(mitternachtsformel(3, | ||
| + | assert mitternachtsformel(1, | ||
| + | assert mitternachtsformel(1, | ||
| + | </template> | ||
| + | </ | ||
| - | ++++ | ||
| - | |||
| - | </ | ||