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 [2023-02-24 09:18] – [Aufgabe GA4] gra | gf_informatik:funktionen [2024-12-02 14:09] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
===== Funktionen ===== | ===== Funktionen ===== | ||
- | Komplexe Programme können mit Hilfe von Funktionen in kleinere, leichter | + | ++++Links |
- | ==== Definition ==== | + | * Dreiteiliges Tutorial zum Thema Funktionen vom Kanal " |
+ | * Funktionen: [[https:// | ||
+ | * Funktionen mit Parametern: [[https:// | ||
+ | * Funktionen mit Rückgabewert: | ||
- | Eine **Funktion** ist immer wie folgt aufgebaut: | + | ++++ |
+ | |||
+ | Wir haben gesehen, dass man mit einer while-Schleife den gleichen Codeblock mehrfach hintereinander ausführen kann. Was ist nun aber, wenn man den gleichen Codeblock //nicht// direkt hintereinander, | ||
+ | |||
+ | Beispiele: | ||
+ | * In einem Zahlenspiel wollen wir oft überprüfen, | ||
+ | * Du möchtest oft die gleiche Art Rechnung ausführen, z.B. eine lineare Gleichung lösen -> Funktion `linear_equation_solver(...)` | ||
+ | |||
+ | Übrigens hast du schon viele Funktionen kennengelernt - ohne dass du es wahrscheinlich gemerkt hast. Zum Beispiel ist die Funktion `forward(...)` für Turtles eine Funktion, die ein Turtle eine gewisse Anzahl Pixel vorwärts laufen lässt. | ||
+ | In Python wird eine Funktion wie folgt programmiert: | ||
<code python> | <code python> | ||
def name_der_funktion(PARAMETER): | def name_der_funktion(PARAMETER): | ||
- | # CODE DER FUNKTION | + | # Codeblock der Funktion |
- | return | + | return |
</ | </ | ||
- | * Das Schlüsselwort | + | * Das Schlüsselwort |
- | * Darauf folgt der **Funktionsname**. Typischerweise schreibt man diesen mit ausschliesslich Kleinbuchstaben und Underlines | + | * Darauf folgt der **Funktionsname**. Typischerweise schreibt man diesen mit ausschliesslich Kleinbuchstaben und Underscores `_`. |
- | * Direkt anschliessend werden **runde Klammern** geschrieben. Diese enthalten die **Parameter**. Das sind Werte, die an die Funktion übergeben werden. Funktionen können auch ohne Parameter definiert werden, die Klammern sind dann halt einfach leer. | + | * Direkt anschliessend werden |
- | * Nach einem **Doppelpunkt** | + | * Nach einem **Doppelpunkt** |
- | | + | |
+ | * Eine Funktion kann (muss aber nicht) mit `return` etwas **zurückgeben**. | ||
Nachdem du eine Funktion definiert hast, kannst du sie ganz einfach aufrufen. Dazu mehr in den Beispielen unten. | Nachdem du eine Funktion definiert hast, kannst du sie ganz einfach aufrufen. Dazu mehr in den Beispielen unten. | ||
- | Übrigens hast du schon viele Funktionen kennengelernt - ohne dass du es wahrscheinlich gemerkt hast. Zum Beispiel | + | === Beispiel |
- | ==== Funktionen ohne Rückgabewert ==== | + | 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. |
+ | <code python> | ||
+ | def say_hi(): | ||
+ | print(" | ||
- | In diesem Unterkapitel schauen wir Funktionen ohne Rückgabewert an, also Funktionen ohne das `return`-Statement am Ende. | + | say_hi() |
+ | say_hi() | ||
+ | </ | ||
- | **Beispiel:** Du möchtest das gleiche Quadrat mehrfach zeichnen. Dies kannst du wie folgt machen: | + | === Beispiel |
- | <code python> | + | Nun soll unsere Begrüss-Funktion persönlicher werden. Wir wollen sowohl Silvia wie auch Gabriele grüssen. Der Code dazu ist identisch, mit Ausnahme des Namens. Dazu können wir der Funktion ein **Argument** (hier: den Namen) übergeben. Dazu müssen wir die Funktion ' |
- | from gturtle import | + | |
- | fritz = Turtle() | + | Beim ersten Funktionsaufruf unten hat `name` also den Wert `" |
- | fritz.hideTurtle() | + | |
- | # Quadrat 1 | + | <code python> |
- | fritz.setPos(-130,0) | + | def say_hi(name): |
- | repeat 4: | + | |
- | | + | |
- | fritz.left(90) | + | |
- | # Quadrat 2 | + | say_hi(" |
- | fritz.setPos(0, | + | say_hi(" |
- | repeat 4: | + | |
- | fritz.forward(100) | + | |
- | | + | |
</ | </ | ||
- | Es fällt auf, das hier zweimal der // | + | === 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, die uns eine Zufallszahl von $1$ bis $6$ gibt: | ||
<code python> | <code python> | ||
- | repeat 4: | + | import random |
- | | + | |
- | | + | def wuerfle(): |
+ | | ||
+ | | ||
+ | |||
+ | print(wuerfle()) | ||
+ | print(wuerfle()) | ||
+ | print(wuerfle()) | ||
</ | </ | ||
- | Dies ist nicht sehr elegant. Wenn man nun das gleiche Quadrat zehnmal zeichnen möchte, wird es noch viel schlimmer! Es lohnt sich deshalb hier, eine Funktion | + | === Beispiel 4: Funktion |
+ | 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: | ||
<code python> | <code python> | ||
- | from gturtle | + | import |
- | fritz = Turtle() | + | def wuerfle(max_nr): |
- | fritz.hideTurtle() | + | |
+ | return rand_nr | ||
- | def quadrat(): | + | print(wuerfle(12)) |
- | repeat 4: | + | print(wuerfle(12)) |
- | fritz.forward(100) | + | print(wuerfle(12)) |
- | fritz.left(90) | + | |
- | + | ||
- | # Quadrat 1 | + | |
- | fritz.setPos(-130,0) | + | |
- | quadrat() | + | |
- | + | ||
- | # Quadrat 2 | + | |
- | fritz.setPos(0,0) | + | |
- | quadrat() | + | |
</ | </ | ||
- | Beachte, dass in obigem Code jeweils zuerst | + | 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: |
<code python> | <code python> | ||
- | from gturtle | + | import |
- | + | ||
- | fritz = Turtle() | + | |
- | fritz.hideTurtle() | + | |
- | + | ||
- | def quadrat(x, | + | |
- | fritz.setPos(x, | + | |
- | repeat 4: | + | |
- | fritz.forward(100) | + | |
- | fritz.left(90) | + | |
- | + | ||
- | # Quadrat 1 | + | |
- | quadrat(-130, | + | |
- | + | ||
- | # Quadrat 2 | + | |
- | quadrat(0, | + | |
- | </ | + | |
- | Du kannst der Funktion auch noch weitere Argumente übergeben, zum Beispiel um die Grösse des Quadrats und dessen Farbe anzugeben: | + | def wuerfle(max_nr=6): |
+ | rand_nr = random.randint(1, | ||
+ | return rand_nr | ||
- | <code python> | + | print(wuerfle(12)) # 12er-Wuerfel |
- | from gturtle import * | + | print(wuerfle()) |
- | + | ||
- | fritz = Turtle() | + | |
- | fritz.hideTurtle() | + | |
- | + | ||
- | def quadrat(x, | + | |
- | | + | |
- | fritz.setPenColor(farbe) | + | |
- | repeat 4: | + | |
- | fritz.forward(seite) | + | |
- | fritz.left(90) | + | |
- | + | ||
- | # Quadrat 1 | + | |
- | quadrat(-130,0, | + | |
- | + | ||
- | # Quadrat 2 | + | |
- | quadrat(0, | + | |
</ | </ | ||
+ | Der erste Funktionsaufruf simuliert natürlich einen 12er-Würfel. Der zweite einen 6er-Würfel: | ||
- | ==== Funktionen mit Rückgabewert | + | ==== Aufgaben E ==== |
- | Funktionen bieten sich auch an, wenn man mehrfach die gleiche Rechnung, einfach mit verschiedenen Werten, ausführen möchte. Allerdings möchte man dann, dass die Funktion einem das Resultat als **Rückgabewert** zurück gibt. | + | **Vorwissen:** |
+ | * [[gf_informatik: | ||
+ | * Bis und mit Beispiel 2 " | ||
- | **Beispiel:** Wir wollen eine Funktion definieren, die uns das Volumen eines Quaders zurück gibt. Falls der Quader die Seitenlängen $a,b$ und $c$ hat, so ist sein Volumen | + | Bei diesen Aufgaben geht es um folgendes: |
- | $$V = a \cdot b \cdot c$$ | + | |
- | Die zugehörige Funktion ist dann: | + | |
- | <code python quader.py> | + | |
- | def quader(a, | + | |
- | resultat = a*b*c | + | |
- | return resultat | + | |
- | + | ||
- | print(quader(4, | + | |
- | </ | + | |
- | Auf der letzten Zeile wird das Volumen für einen Quader mit Seitenlängen $4, 3$ und $2$ berechnet und dann in der Konsole ausgegeben. | + | |
- | ==== Probleme mit Funktionen | + | * Verstehen, was Funktionen |
- | [[gf_informatik: | + | * einfache |
- | ==== Aufgaben G – Funktionen ohne/mit Rückgabewert ==== | + | |
- | === Aufgabe | + | === Aufgabe |
- | Für diese Aufgabe benötigst du Turtle graphics. | + | **Nette Begrüssung: |
- | - Definiere eine Funktion namens '' | + | === Aufgabe E2 === |
- | - Rufe im Code die Funkton '' | + | |
- | === Aufgabe G2 === | + | Schreibe eine Funktion `head_or_tail()`, |
- | | + | <nodisp 1> |
- | - Rufe im Code die Funkton '' | + | ++++Tipps: |
+ | Erzeuge mithilfe des `random`-Moduls eine [[gf_informatik: | ||
+ | ++++ | ||
+ | </ | ||
- | === Aufgabe G3 === | ||
- | - Erweitere die Funktion '' | + | === Aufgabe E3 === |
- | - Rufe im Code die Funkton '' | + | |
+ | Schreibe eine Funktion `fortune_cookie()`, | ||
- | === Aufgabe G4 === | + | Rufe die Funktion auf. |
- | Für diese Aufgabe benötigst | + | <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. | ||
- | * quadrat(turtle, | + | Simuliere nun 20 Münzenwürfe. |
- | * dreieck(turtle, | + | ++++ |
- | * kreis(turtle, | + | </ |
- | Ruft man z.B. die Funktion `dreieck(michelangelo, | + | === Aufgabe E4 === |
- | Zeichne mit diesen Funktionen ein Bild. Jede der drei Formen soll mindestens 3 mal vorkommen. Variiere | + | TurtleGraphics: |
- | == Erweiterung (Optional) | + | === Aufgabe E5 === |
- | Erstelle ein Python Modul: | + | |
- | * Speichere die Geometrie-Funktionen in einer separaten Datei `geometrie.py`. | + | |
- | * Erstelle eine zweite Datei `g4.py` im selben Ordner. | + | |
- | * In `g4.py` importierst du das Geometrie-Modul mit `import geometrie`. | + | |
- | * Die importierten Funktionen müssen zur Verwendung qualifiziert werden, z.B. `geometrie.dreieck(...)`. | + | |
- | * Zeichne mit den Funktionen abstrakte Kunst (wie oben). | + | |
- | <nodisp 1> | + | Schreibe folgende Funktionen: |
- | ++++Lösung| | + | * `square(x,y,l)`: Zeichnet Quadrat mit Seitenlänge l, startend an Position $(x,y)$ |
- | <code python geometrie.py> | + | * `circle(x,y,r)`: Zeichnet Kreis mit Radius r, startend an Position $(x,y)$ |
- | def vieleck(turtle, ecken, seite, farbe, x,y): | + | * `rectange(x,y,a,b)`: Zeichnet Rechteck mit Seitenlängen a und b, startend an Position $(x,y)$ |
- | turtle.setPos(x,y) | + | * `triangle(x,y,l)`: Zeichnet gleichseitiges Dreieck mit Seitenlänge l, startend an Position $(x,y)$ |
- | | + | * Funktion für selbst gewählte geometrische Figur |
- | # Aussenwinkel eines Vielecks summieren sich auf 360° | + | |
- | # https:// | + | |
- | winkel = 360 / ecken | + | |
- | repeat ecken: | + | |
- | turtle.forward(seite) | + | |
- | | + | |
- | + | ||
- | def quadrat(turtle, breite, farbe, x, y): | + | Mache nun moderne Kunst, indem du diese Funktionen aufrufst. |
- | vieleck(turtle, | + | |
- | + | ||
- | def dreieck(turtle, | + | |
- | vieleck(turtle, | + | |
- | def kreis(turtle, radius, farbe, x, y): | + | **Challenge |
- | turtle.setPos(x, | + | |
- | turtle.setPenColor(farbe) | + | |
- | turtle.leftArc(radius, | + | |
- | </ | + | |
- | <code python kunst.py> | + | Vom Zufall abhängen können z.B. folgende Werte: |
- | import geometrie | + | * Anzahl, wie oft jede Funktion aufgerufen wird. |
- | from gturtle import | + | * Position von Figuren |
+ | * Grössen von Figuren | ||
+ | * Drehung von Figuren | ||
+ | | ||
- | t = Turtle() | + | Tipps: |
- | t.hideTurtle() | + | * 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. | ||
- | geometrie.quadrat(t, | + | <nodisp 1> |
- | geometrie.kreis(t, | + | ++++Lösungen Aufgaben E| |
- | geometrie.dreieck(t, | + | |
- | </code> | + | |
- | ++++ | + | |
- | </ | + | |
- | === Aufgabe G5 === | + | |
- | Kennt man in einem rechtwinkligen Dreieck die beiden Katheten, so kann man mit dem Satz von Pythagoras die Hypothenuse bestimmen. Definiere eine Funktion mit Namen // | + | ==== Aufgaben E ==== |
- | //Tipp:// Die Wurzel einer Zahl ziehst du mit `sqrt(x)`, dazu musst du aber zuerst das math-Modul importieren: | + | === Aufgabe E1 === |
- | // | ||
- | |||
- | <nodisp 1> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
- | import math | + | def greetings(name,residence): |
- | def pythagoras(a, b): | + | |
- | | + | |
- | print(pythagoras(3,4)) | + | greetings(" |
+ | greetings(" | ||
</ | </ | ||
- | ++++ | ||
- | </ | ||
- | === Aufgabe G6 === | ||
- | Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ | + | === Aufgabe E2 === |
- | Definiere eine Funktion //kugel//, der man als Argument den Radius übergibt und die dann das Volumen zurückgibt. Die Kreiszahl Pi ($\pi$) kannst du mit `math.pi` aufrufen, dazu muss aber auch wieder zuerst das math-Modul importiert werden (`import math`). | + | |
- | <nodisp 1> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
- | import | + | import |
- | def kugel_volumen(radius): | + | """ |
- | | + | Wichtig: Die Ermittlung der Zufallszahl mit randint und die Verzweigung |
+ | """ | ||
- | print kugel_volumen(2) | + | def head_or_tail(): |
+ | r = random.randint(1, | ||
+ | if r == 1: | ||
+ | print(" | ||
+ | else: | ||
+ | print(" | ||
+ | |||
+ | head_or_tail() | ||
+ | head_or_tail() | ||
</ | </ | ||
- | ++++ | ||
- | </ | ||
- | === Aufgabe G7 === | ||
- | Definiere eine Funktion // | + | === Aufgabe E3 === |
- | {{: | ||
- | |||
- | <nodisp 1> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
import random | import random | ||
- | def wuerfel(): | ||
- | return random.randint(1, | ||
- | print(wuerfel()) | + | def fortune_cookie(): |
+ | r = random.randint(1, | ||
+ | if r == 1: | ||
+ | | ||
+ | elif r == 2: | ||
+ | print(" | ||
+ | else: | ||
+ | print(" | ||
</ | </ | ||
- | ++++ | ||
- | </ | ||
- | == Challenge (optional) == | + | === Aufgabe E4 === |
- | Simuliere mit TurtleGraphics einen Würfel. | + | |
- | + | ||
- | ==== Aufgaben GA – Funktionen mit Algorithmen (ohne/mit Rückgabewert) | + | |
- | === Aufgabe GA1 – Fibonacci-Zahlen === | + | <code python> |
- | Schreibe eine Funkton namens // | + | from turtle import * |
+ | turi = Turtle() | ||
+ | turi.hideturtle() | ||
+ | turi.speed(1000) | ||
- | Zum Beispiel soll '' | + | def square(l): |
+ | i = 0 | ||
+ | while i < 4: | ||
+ | turi.forward(l) | ||
+ | turi.right(90) | ||
+ | i = i + 1 | ||
- | Tipp: Setze in der Funktion zuerst zwei Variablen a und b auf die ersten beiden Fibonacci-Zahlen | + | square(50) |
+ | square(100) | ||
+ | square(150) | ||
+ | square(200) | ||
+ | </ | ||
+ | |||
+ | === Aufgabe E5 === | ||
- | <nodisp 1> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
- | def fibonacci_numbers(anz): | + | from turtle import * |
- | a = 0 | + | t = Turtle() |
- | b = 1 | + | t.hideturtle() |
- | print a | + | |
- | print b | + | |
- | repeat anz-2: | + | |
- | c = a + b | + | |
- | print c | + | |
- | a = b | + | |
- | b = c | + | |
- | fibonacci_numbers(8) | + | 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, | ||
+ | t.circle(r) | ||
+ | |||
+ | def rectangle(x, | ||
+ | t.teleport(x, | ||
+ | i = 0 | ||
+ | while i < 2: | ||
+ | t.fd(a) | ||
+ | t.right(90) | ||
+ | t.fd(b) | ||
+ | t.right(90) | ||
+ | i = i + 1 | ||
+ | |||
+ | def triangle(x, | ||
+ | t.teleport(x, | ||
+ | i = 0 | ||
+ | while i < 3: | ||
+ | t.fd(l) | ||
+ | t.right(120) | ||
+ | i = i + 1 | ||
+ | |||
+ | square(-200, | ||
+ | circle(0, | ||
+ | rectangle(-150, | ||
+ | triangle(100, | ||
</ | </ | ||
+ | |||
+ | [[https:// | ||
+ | |||
++++ | ++++ | ||
</ | </ | ||
- | === Aufgabe GA2 – Fibonacci-Muster | ||
- | Schreibe eine Funkton namens // | ||
- | Zum Beispiel soll '' | + | ==== Aufgaben F ==== |
- | * Hier soll die Fibonacci-Folge nicht mit 0, sondern mit 1 beginnen (a = b = 1). | + | |
- | * Multipliziere die Fibonacci-Zahlen mit einem Faktor, zum Beispiel 5, um den Radius zu erhalten. | + | |
- | Teste die Funktion: '' | + | **Vorwissen:** |
+ | * [[gf_informatik:funktionen|Funktionen]] | ||
+ | * Bis und mit Beispiel 4 " | ||
- | {{:gf_informatik: | + | Bei diesen Aufgaben geht es um folgendes: |
- | <nodisp 1> | + | * Funktionen mit Rückgabewert verstehen und anwenden. |
- | ++++Lösung| | + | |
- | <code python> | + | |
- | from gturtle import | + | |
- | leonardo = Turtle() | + | |
- | def fibonaci_arcs(n): | + | === Aufgabe F1 === |
- | a = b = 1 | + | |
- | leonardo.leftArc(a*5, | + | |
- | repeat n-2: | + | |
- | c = a + b | + | |
- | leonardo.leftArc(c*5, | + | |
- | a = b | + | |
- | b = c | + | |
- | fibonaci_arcs(9) | + | Definiere eine Funktion mit einem Argument `volume_cube(x)`, die das Volumen eines Würfels mit Seitenlänge $x$ (in cm) berechnet |
- | </ | + | |
- | ++++ | + | |
- | </ | + | |
- | === Aufgabe GA3 – Fibonacci-Muster mit Zeitmessung === | + | |
- | Erweitere die Funktion // | + | |
- | <code python> | + | Welches Volumen hat ein Würfel mit Seitenlänge 13 cm? |
- | import time | + | |
- | time1 = time.time() | + | |
- | ## some code that takes some time | + | |
- | ## ... | + | |
- | time2 = time.time() | + | |
- | time_passed = time2 - time1 | + | |
- | </ | + | |
- | Teste die Funktion zum Beispiel so: | + | === Aufgabe F2 === |
- | <code python> | + | |
- | print(fibonacci_arcs(9)) | + | |
- | </ | + | |
- | Damit sollte dein Code das Muster aus neun Viertelkreisen zeichnen und anschliessend die gemessene Anzahl Sekunden ausgeben. | + | |
+ | **Satz von Pythagoras: | ||
- | <nodisp 1> | + | //Tipp:// Die Wurzel einer Zahl ziehst du mit `sqrt(x)`, dazu musst du aber zuerst das math-Modul importieren: |
- | ++++Lösung| | + | |
- | <code python> | + | |
- | import time | + | |
- | from gturtle import * | + | |
- | leonardo = Turtle() | + | |
- | def fibonaci_arcs(n): | + | //Kontrolle:// Für die Katheten 3 und 4 ist die Hypothenuse 5. Die Codezeile `print(pythagoras(3,4))` soll dann also `5.0` ausgeben. |
- | start_time = time.time() | + | |
- | a = b = 1 | + | |
- | leonardo.leftArc(a*5, 180) # erste zwei Viertelkreise | + | |
- | repeat n-2: | + | |
- | c = a + b | + | |
- | leonardo.leftArc(c*5, 90) | + | |
- | a = b | + | |
- | b = c | + | |
- | return(time.time()-start_time) | + | |
- | print(fibonaci_arcs(9)) | ||
- | </ | ||
- | ++++ | ||
- | </ | ||
- | === Aufgabe GA4 === | ||
- | Schreibe eine Funktion // | + | === Aufgabe F3 === |
- | Zum Beispiel soll '' | + | |
- | //Tipp:// Verwende | + | Das Volumen einer Kugel mit Radius $R$ ist: $$V = \frac{4\pi}{3}\cdot R^3$$ |
+ | Definiere | ||
- | <nodisp 2> | + | === Aufgabe F4 === |
- | ++++Lösung| | + | |
- | <code python> | + | |
- | # Variante 1 | + | |
- | def summe_ungerade1(n): | + | |
- | i = 1 | + | |
- | summe = 0 | + | |
- | while i <= n: | + | |
- | summe = summe + i | + | |
- | i = i + 2 | + | |
- | return summe | + | |
- | # Variante | + | Schreibe eine Funktion `grade(points)`, |
- | def summe_ungerade2(n): | + | $$\text{Note} = \frac{5 \cdot \text{(erreichte Punkte)}}{\text{Punktzahl für Note 6}} + 1$$ |
- | | + | |
- | | + | Beachte: |
- | while i <= n: | + | * Um die Noten schön zu runden, kannst du die // |
- | if i % 2 != 0: | + | * Erreicht man mehr Punkte als notwendig für Note 6, soll man trotzdem die Note 6 erhalten. |
- | | + | |
- | | + | === Aufgabe F5 === |
- | return | + | |
+ | Die **Fakultät** ist eine Funktion, welche jeder ganzen natürlichen Zahl das Produkt aller natürlichen Zahlen | ||
+ | |||
+ | 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 Liste mit den beiden Werten 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 === | ||
+ | |||
+ | <code python> | ||
+ | def volume_cube(x): | ||
+ | return | ||
- | print(summe_ungerade1(7)) | + | v = volume_cube(13) |
- | print(summe_ungerade2(7)) | + | print(v) |
</ | </ | ||
- | ++++ | ||
- | </ | ||
- | === Aufgabe GA5 (Herausforderung) === | ||
- | 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$. | + | === Aufgabe F2 === |
- | Schreibe eine Funktion | + | <code python> |
+ | def pythagoras(a, | ||
+ | return sqrt(a*a + b*b) | ||
+ | |||
+ | print(pythagoras(3, | ||
+ | </code> | ||
- | **Grosse Herausforderung**: | ||
+ | === Aufgabe F3 === | ||
- | <nodisp 2> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
- | def fakultaet(n): | + | import math |
- | | + | def volume_sphere(r): |
- | i = 2 | + | |
- | while i <= n: | + | |
- | result = result | + | |
- | i = i + 1 | + | |
- | return result | + | |
- | print(fakultaet(5)) | + | print(volume_sphere(3)) |
</ | </ | ||
- | Rekursiv: | + | |
+ | === Aufgabe F4 === | ||
<code python> | <code python> | ||
- | def fakultaet(n): | + | def grade(points, |
- | | + | |
- | | + | if gr > 6: |
- | return | + | |
+ | return | ||
- | print(fakultaet(5)) | + | print(grade(23,51)) |
</ | </ | ||
- | Siehe [[https:// | ||
- | ++++ | ||
- | </ | ||
- | === Aufgabe GA6 (optional) === | ||
- | In [[https:// | ||
- | Schreibe zwei Funktionen //ggt// und //kgv//, welche als Argumente zwei Zahlen nehmen und daraus den grössten gemeinsamen Teiler bzw. das kleinste gemeinsame Vielfache berechnen. Das kGV zweier Zahlen erhältst du, indem du das Produkt dieser Zahlen durch den ggT der beiden Zahlen teilst. Es lohnt sich also, zuerst die Funktion //ggt// zu definieren, damit diese dann in der Definition der Funktion //kgv// aufgerufen werden kann. | ||
- | Wenn du das gemacht hast: Erstelle eine weitere Funktion // | + | === Aufgabe F5 === |
- | <nodisp 2> | ||
- | ++++Lösung| | ||
<code python> | <code python> | ||
+ | def factorial(n): | ||
+ | product = 1 | ||
+ | i = 1 | ||
+ | while i <= n: | ||
+ | | ||
+ | i = i + 1 | ||
+ | return product | ||
- | def ggt(a, b): | + | print(factorial(5)) |
- | while b != 0: # solange Rest nicht 0 | + | </code> |
- | temp = b # zweite Zahl (b) zwischenspeichern | + | |
- | b = a % b # Rest a / b ermitteln und in b speichern | + | |
- | a = temp # ursprünglicher Wert von b a zuweisen | + | |
- | return a | + | |
- | def kgv(a, b): | ||
- | return a*b/ | ||
- | def ggt_kgv(op, a, b): | + | === Aufgabe F6 === |
- | | + | |
- | return | + | <code python> |
- | elif op == " | + | def mitternachtsformel(a,b,c): |
- | return | + | |
+ | if d < 0: | ||
+ | return | ||
+ | elif d == 0: | ||
+ | return | ||
else: | else: | ||
- | | + | |
- | | + | |
- | print(ggt(391,544)) | + | |
- | print(kgv(4,6)) | + | print(mitternachtsformel(3,-6,-5)) # 2 Loesungen |
- | print(ggt_kgv(" | + | print(mitternachtsformel(1,-4,4)) # 1 Loesung |
- | print(ggt_kgv(" | + | print(mitternachtsformel(1,2,7)) # keine Loesung |
- | print(ggt_kgv(" | + | |
</ | </ | ||
+ | |||
++++ | ++++ | ||
- | </ | ||
- | |||
+ | </ |