==== Aufgaben ND – Funktionen für Fortgeschrittene ==== === ND1 – Weitere Nächte im Hotel === Schreibe eine neue Funktion ''hotel\_preise2(personen, naechte, anreisetag)'', die den Gesamtpreis für einen Hotelaufenthalt berechnet und zurückgibt: Preise **pro Nacht**: ^ Tarif (Anreisetag) ^ Einzelzimmer ^ Doppelzimmer ^ | Sonntag bis Donnerstag | 120 | 140 | | Freitag und Samstag | 150 | 200 | {{:gf_informatik:programmieren_iv_gra:pasted:20250508-071652.png?220}} **Hinweise:** * Deine Funktion muss zuerst die Anzahl Einzel- und Doppelzimmer berechnen (ausgehend von der Anzahl Personen): Es ist maximal ein Einzelzimmer nötig. * Die Angabe des Anreisetags erfolgt als Text, z. B. "Freitag", siehe Code unten. * Erstelle in der Funktion eine Liste ''tage'' mit Texten für jeden Wochentag. Mit der Funktion ''index'' kannst du die Position eines gegebenen Wochentags ermitteln, z.B. gäbe ''tage.index("Dienstag")'' den Wert **1** zurück. * Wenn du die Position des Anreisetag weisst, kannst du für jede Nacht beurteilen, ob Wochenendtarif gilt oder nicht – aber wie? Versuche es erst ohne Hilfe von KI. Teste deine Funktion mit folgendem Code: # Reise 1: 2 Personen, 2 Nächte ab Freitag: Preis = 400 print(hotel_preise2(2, 2, "Freitag")) # Reise 2: 3 Personen, 4 Nächte ab Mittwoch: Preis = 1220 print(hotel_preise2(3, 4, "Mittwoch")) # Reise 3: 1 Person, 10 Nächte ab Donnerstag: Preis = 1320 print(hotel_preise2(1, 10, "Donnerstag")) === ND2 – RGB-Palette === - Schreibe eine Funktion ''rgb\_dot(red, green, blue)'', die einen Punkt in der gewünschten Farbe zeigt. * Die drei Argumente können jeweils einen Wert zwischen 0 und 5 einnehmen: * ''rgb\_dot(0,0,0)'' soll einen schwarzen Punkt zeichnen, * ''rgb\_dot(5,0,0)'' einen ganz roten Punkt und * ''rgb\_dot(5,5,5)'' einen weissen Punkt. - Ergänze einen Code, der alle 216 Farben, die mit dieser Funktion gezeichnet werden können, in einer Farbpallete wie im Bild unten aufzeichnet. {{:gf_informatik:programmieren_iv_gra:pasted:20250508-075047.png}} * In jedem der sechs Quadrate nimmt der Blau-Anteil jeweils von links nach rechts und der Grün-Anteil von oben nach unten zu. * Über die sechs Quadrate hinweg nimmt der Rot-Anteil von links nach rechts zu. === ND3 – Fibonacci-Spirale === Infomiere dich zuerst über die Informiere dich über die [[https://de.wikipedia.org/wiki/Fibonacci-Folge|Fibonacci-Folge]] und erstelle dann Funktionen, mit denen Du eine Fibonacci-Spirale wie im Bild malen kannst. - Erstelle eine Funktion ''fibonacci(n)'', die eine Liste mit den ersten ''n'' Zahlen der Fibonacci-Folge zurückgibt. Zum Beispiel gibt ''fibonacci(7)'' die Liste ''[0, 1, 1, 2, 3, 5, 8]'' zurück. Teste die Funktion. - Erstelle eine Funktion ''viertelrkreis(radius, farbe)'', die einen Viertelkreis in gewünschter Farbe zeichnet. **Tipp:** Die Turtle sollte den Kreis so zeichnen, dass sie mit dem Bogen beginnt und am Ende an derjenigen Position ist, an der der nächste Kreisbogen beginnen kann. Teste deine Funktion, indem du sie mehrmals, mit immer grösserem Radius, aufrufst. - Erstelle eine Funktion ''fibo\_spirale(n)'', die eine fibonacci-Spirale aus ''n'' Viertelkreisen wie im Bild malt: Die Farben der Viertelkreise wechseln zwischen blau und rot. Verwende die bereits erstellten Funktionen ''fibonacci'' und ''viertelkreis''. Teste deine Funktion. {{:gf_informatik:programmieren_iv_gra:pasted:20250516-100248.png?330}} == Zusatzaufbabe == Erstelle eine neue Funktion ''fibo\_spirale2(n, colors)''. Dieser Funktion wird zusätzlich eine Farbliste beliebiger Länge mitgegeben. Die Funktion zeichnet die Viertelkreise gemäss der Farbliste. Für folgenden Code sollte nebenstehendes Bild entstehen. farben = ["crimson", "orange", "maroon", "gold"] fibo_spirale2(9, farben) {{:gf_informatik:programmieren_iv_gra:pasted:20250517-095040.png?330}} ==== Lösungen ==== ++++Lösungen zu Aufgaben ND:| === ND1 === def hotel_preise2(personen, naechte, anreisetag): doppelzimmer = personen // 2 einzelzimmer = personen % 2 tage = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] starttag = tage.index(anreisetag) preis = 0 nacht = 0 while nacht < naechte: aktueller_tag_index = (starttag + nacht) % 7 aktueller_tag = tage[aktueller_tag_index] if aktueller_tag in ["Freitag", "Samstag"]: preis = preis + doppelzimmer * 200 + einzelzimmer * 150 else: preis = preis + doppelzimmer * 140 + einzelzimmer * 120 nacht = nacht + 1 return preis # Reise 1: 2 Personen, 2 Nächte ab Freitag: Preis = 400 print(hotel_preise2(2, 2, "Freitag")) # Reise 2: 3 Personen, 4 Nächte ab Mittwoch: Preis = 1220 print(hotel_preise2(3, 4, "Mittwoch")) # Reise 3: 1 Person, 10 Nächte ab Donnerstag: Preis = 1320 print(hotel_preise2(1, 10, "Donnerstag")) === ND2 === from gturtle import * paula = Turtle() def rgb_dot(red, green, blue): hexcodes = ["00", "33", "66", "99", "CC", "FF"] colorcode = hexcodes[red] + hexcodes[green] + hexcodes[blue] paula.setPenColor(colorcode) paula.dot(40) paula.right(90) xpos = 0 ypos = 0 for r in range(6): for g in range(6): for b in range(6): paula.setPos(xpos, ypos) rgb_dot(r,g,b) xpos = xpos + 50 xpos = xpos - 300 ypos = ypos - 50 xpos = xpos + 350 ypos = 0 === ND3 === from gturtle import * leonardo = Turtle() def fibonacci(n): fibs = [] s1 = 0 s2 = 1 i = 0 while i < n: fibs.append(s1) s = s1 + s2 s1 = s2 s2 = s i = i + 1 return fibs def viertelkreis(radius, farbe): leonardo.setFillColor(farbe) leonardo.startPath() leonardo.rightArc(radius, 90) leonardo.right(90) leonardo.forward(radius) leonardo.fillPath() leonardo.right(180) leonardo.forward(radius) leonardo.right(90) def fibo_spirale(n): fibos = fibonacci(n) i = 0 while i < len(fibos): radius = fibos[i] * 10 if i % 2 == 0: viertelkreis(radius,"red") else: viertelkreis(radius,"blue") i = i + 1 def fibo_spirale2(n, colors): fibos = fibonacci(n) i = 0 while i < len(fibos): radius = fibos[i] * 10 viertelkreis(radius, colors[i % len(colors)]) i = i + 1 leonardo.right(90) farben = ["crimson", "orange", "maroon", "gold"] fibo_spirale2(9, farben) ++++