In Abschnitt haben Sie bereits die (quadratische) Flagge des Kantons Zürich mithilfe der Turtle gezeichnet. Ohne Beachtung der Farben könnte der Code dafür wie in Abschnitt aussehen.
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
Angenommen wir wollten die Grösse der Züri-Flagge ändern, dann müssten wir den Wert 50 an genau drei Stellen entsprechend anpassen! Dieses Vorgehen ist zum einen mühsam und zum anderen höchst fehleranfällig (es kann sehr gut passieren, dass eine Änderung nicht konsequent an allen Stellen durchgeführt wird).
Viel besser ist es, wenn wir der Seitenlänge des Quadrats einen Namen geben. Genau dies haben wir in Abschnitt getan: Wir haben der Länge den Namen laenge gegeben.
# File: mit_variable.pyimport turtle as timport math# Wir benutzen die Variable 'laenge', um der Länge einen Namen zu geben:laenge =50for _ inrange(4): t.forward(laenge) t.left(90)t.forward(laenge)t.left(135)t.forward(laenge * math.sqrt(2))t.hideturtle()t.done()
Note
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
Der Ausdruck laenge ist ein Beispiel einer sogenannten Variable.
Variable in Python
Eine Variable in Python ist im Wesentlichen ein Name, der auf einen im Speicher (des Computers) abgelegten Wert verweist. Mit der Zuweisung
wird veranlasst, dass der Variablenname a zu einer Referenz (einem Verweis) auf den Speicherort eines Objekts vom Typ “ganze Zahl” mit dem Wert 436 wird.
Eine Variable wird erstellt, sobald man ihr mit dem Gleichheitszeichen (=) ein Objekt zuweist. Das Gleichheitszeichen hat allerdings nicht dieselbe Bedeutung wie in der Mathematik! Vielmehr bedeutet das Gleichheitszeichen in Python: “die linke Seite soll ein Name für das Ding auf der rechten Seite werden”:
$ {} ={}$
Die Erklärung dieser Zeile ist: “Wir werten den Ausdruck 10 + 3 aus und erhalten die Zahl 13. Diesen Wert (13) speichern wir nun in der Variable a”.
Wir können den Inhalt der Variable a nun mit einem print()-Befehl auf dem Terminal ausgeben lassen:
Variablen sind kurz gesagt ein Wort, das auf einen veränderbaren (variablen) Wert verweist. Der Variablenname darf dabei (fast) frei gewählt werden, sofern folgende Regeln eingehalten werden:
Benennung von Variablen
Bei der Wahl eines Variablennamens gibt es einige Punkte zu beachten:
Der Name muss mit einem Buchstaben oder Unterstrich beginnen (e.g. nicht ).
Der Name darf kein von Python reserviertes Wort sein (for, def, if, etc.).
Der Name sollte sinnvoll und beschreibend (deskriptiv) sein. Wenn Sie beispielsweise die Höhe eines Hauses in einer Variable speichern, ist es sinnvoll, diese h oder hoehe zu nennen und nicht etwa x.
Variablennamen dürfen nur alphanumerische Symbole (a – z, A – Z, 0 – 9) und Unterstriche enthalten. Insbesondere also weder Leerzeichen noch Umlaute.
Da Variablennamen keine Leerzeichen enthalten dürfen, sollten zusammengesetzte Namen mithilfe von Unterstrichen () gebildet werden:
Wichtiger Hinweis
In der Mathematik bedeutet das Gleichheitszeichen “der rechte Teil der Gleichung ist gleich dem linken”. Dies ist in Python nicht so! Hier bedeutet das Gleichheitszeichen: “Werte den rechten Teil aus und speichere das Resultat im linken Teil”.
Aufgabe
Berechnen Sie die folgenden Ausdrücke in Python und speichern Sie das Resultat jeweils in einer Variable:
Berechnung
Name der Variable
\(17 - 3 \cdot 8\)
res_1
\((5-2) \cdot 4 + 1\)
res_2
\(3^6\)
res_3
\(18^{(2+3)}\)
res_4
Geben Sie die Variablen jeweils mit print() aus, um die Resultate zu überprüfen.
💡 Musterlösung anzeigen
Aufgabe
Gegeben sind zwei Variablen x und y. Sie möchten die Werte dieser zwei Variablen austauschen, so dass danach x den ursprünglichen Wert von y enthält und umgekehrt. Sie experimentieren zunächst mit folgendem Vorgehen:
Führen Sie das Programm aus und geben Sie die Werte von x und y auf dem Terminal aus. Funktioniert das Programm wie erwartet? Weshalb (nicht)?
💡 Musterlösung anzeigen
x und y haben nun beide den Wert 11. Auf Zeile 6 wird der Wert von y in x gespeichert. Ab diesem Moment haben sowohl die Variablen x wie y denselben Wert 11.
Aufgabe
Wie könnte der Code aus Abschnitt angepasst werden, sodass der Tausch korrekt vollzogen wird?
Tipp: Verwenden Sie neben x und y noch eine dritte Variable.
💡 Musterlösung anzeigen
Mit einer Hilfsvariable:
Challenge
In den Variablen x und y sei jeweils eine ganze Zahl gespeichert. Schreiben Sie ein Programm, welches die Werte von x und y tauscht, ohne eine weitere “Hilfsvariable” wie in Abschnitt zu verwenden. Testen Sie Ihr Programm mit x = 99 und y = 15.
Tipp: Definieren Sie zuerst x = x + y.
💡 Musterlösung anzeigen
Teilen mit Rest
In diesem Abschnitt werden wir einige Überlegungen anstellen, welche Sie vielleicht an Ihre Zeit in der Primarschule zurückerinnern werden.
Beispiel
Angenommen seit einem gewissen Zeitpunkt seien 23 Tage vergangen. Der Zeitpunkt liegt also 3 ganze Wochen zurück und in der vierten Woche sind bereits 2 Tage vergangen. Wir können die Zahl 23 darstellen als \(23 = 7\cdot 3 + 2\). Dabei ist \(3\) (der Quotient) das Resultat der ganzzahligen Division von \(23\) (Dividend) geteilt durch \(7\) (Divisor). Dabei bleibt ein Rest von \(2\).
Bei der ganzzahligen Division \(23\) geteilt durch \(7\) bestimmen wir also, wie häufig \(7\) vollständig (ganz) in \(23\) “passt”.
Nehmen wir weiter an, der Tag 0 sei ein Montag. Dann war auch schon Tag \(-7\) ein Montag und ebenso Tag \(+7\). Offensichtlich entsprechen zwei Tage genau dann demselben Wochentag, wenn ihre Differenz (die Differenz ihrer Nummern) durch 7 teilbar ist1. So sind beispielsweise die Tage 23 und 37 beide Mittwoche.
ganzzahlige Division und Modulo-Operation (informell)
Es seien \(a\) und \(b\) natürliche Zahlen und \(b\neq 0\).
Wir bezeichnen in Python mit das Resultat der ganzzahligen Division von geteilt durch (wie oft hat ganz in Platz).
Beispiel: 23 // 7 ist 3. - Mit a % b (sprich: amodulob) bezeichnen wir den Rest, welcher bei der ganzzahligen Division von geteilt durch bleibt. Wir nennen % die Modulo-Operation.
Beispiel: 23 % 7 ist 2.
Für mehr Details zur Division mit Rest siehe Abschnitt.
Beispiel
Beispiele für die ganzzahlige Division in Python:
Beispiel
Beispiele für Modulo-Berechnungen (Rest der ganzzahligen Division) in Python:
Aufgabe
Füllen Sie die zweite Spalte von Hand aus, berechnen Sie danach (zur Kontrolle) die Werte in Python.
Code
Resultat
1 % 3
?
2 % 3
?
3 % 3
?
4 % 3
?
5 % 3
?
6 % 3
?
💡 Musterlösung anzeigen
Code
Resultat
1 % 3
1
2 % 3
2
3 % 3
0
4 % 3
1
5 % 3
2
6 % 3
0
Aufgabe
Es nehmen \(p>3\) Personen an einem Fest teil (wählen Sie eine Zahl für \(p\)). Für das Fest wurden \(m > 20\) viele Muffins gebacken (wählen Sie eine Zahl für \(m\)). Jede Person soll genau gleich viele, ganze Muffins erhalten. Berechnen Sie, wie viele ganze Muffins jede Person erhält und wie viele Muffins nach dieser gerechten Verteilung auf \(p\) Personen noch übrig bleiben werden. Verwenden Sie dazu den Modulo-Operator.
💡 Musterlösung anzeigen
Beispiel
Offensichtlich ist eine natürliche Zahl \(n\) genau dann gerade, wenn die Gleichheit \(n \;%\; 2 = 0\) gilt, also \(n\) beim Teilen durch 2 den Rest 0 hat.
Zusammengesetzte Zuweisungsoperatoren
Wir haben bislang schon mehrfach Werte von Variablen verändert. In diesem Abschnitt führen wir einige gebräuchliche Python-Operatoren ein. Betrachten Sie das folgende Programm:
Es existiert ein fundamentaler Unterschied zwischen den beiden Ausdrücken x + 5 (Wert von x bleibt unverändert) und x += 5 beziehungsweise x = x + 5 (Wert von x wird überschrieben). Anstelle von x = x + y werden wir häufig den zusammengesetzten Operator += in der Form x += y verwenden. Analoge zusammengesetzte Operatoren für weitere mathematische Operatoren sind in Abschnitt aufgeführt.
zusammengesetzte Zuweisungsoperation
Bedeutung
x += y
speichere x + y in x
x -= y
speichere x - y in x
x *= y
speichere x * y in x
x /= y
speichere x / y in x
x //= y
speichere x // y in x
x %= y
speichere x % y in x
Aufgabe
Zeichnen Sie eine Spirale der Form:
Die kürzeste Seitenlänge der Spirale ist 10 und nach jeder 90-Grad-Rotation soll die Seitenlänge um 10 länger werden.
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
Aufgabe
Die Kubikzahl einer Zahl \(x\) ist gleich der Zahl hoch 3, also \(x^3\). Verwenden Sie eine Schleife um die 10 Kubikzahlen \(1^3, 2^3, \ldots, 10^3\) auszugeben. Beginnen Sie mit einer Variablen x = 1 und erhöhen Sie den Wert von x in jedem Durchgang der Schleife um 1.
💡 Musterlösung anzeigen
Aufgabe
Wandeln Sie das Programm aus so ab, dass am Ende zusätzlich die Summe der 10 Kubikzahlen ausgegeben wird. Verwenden Sie dazu eine zweite Variable summe, die zu Beginn den Wert 0 hat und in jedem Durchgang der Schleife um die Kubikzahl erhöht wird.
💡 Musterlösung anzeigen
Arbeiten mit Text (Strings)
In Python kann man nicht nur arithmetische Operationen mit Zahlen durchführen, sondern auch mit Text arbeiten. In der Informatik verstehen wir unter einem Text jede endliche Folge von Symbolen der Tastatur. Eine solche Folge von Symbolen bezeichnet man auch als Zeichenkette (Englisch: string). Beispiele von Strings haben wir bereits in Abschnitt gesehen. Wir können Strings, ebenso wie Zahlen, in Variablen speichern.
Beispiel
Folgendes Beispiel speichert den Text "Hello, World“| in der Variable a, der Wert der Variable wird danach auf dem Terminal ausgegeben:
Verkettung und Vervielfachung von Strings
Zeichenketten können verkettet, also aneinandergehängt werden:
Das Zusammenfügen, also die “Addition” von Strings wird Konkatenation (Englisch: concatenation) genannt.
Strings können mithilfe des -Operators vervielfacht werden:
Falls Sie also Wiederholungen einer Zeichenkette wünschen, können Sie diese mit einer ganzen Zahl multiplizieren. Diese Zahl bestimmt die Anzahl der Wiederholungen der Zeichenkette. So entspricht der Ausdruck "a" * 3 beispielsweise dem String "aaa".
Aufgabe
Führen Sie das nachfolgende Programm aus und erklären Sie, was das Programm tut:
💡 Musterlösung anzeigen
Das Programm zeichnet einen “Tannenbaum” .
Aufgabe
Erstellen Sie nun ein Programm, das (analog zu Abschnitt) lediglich mit prints und Stringoperationen ein “Herz” zeichnet.
💡 Musterlösung anzeigen
Challenge
Schreiben Sie ein Programm, welches die Form einer Banane auf dem Terminal ausgibt, indem Sie die Stringoperationen * und + verwenden.
💡 Musterlösung anzeigen
Datentypen
Bisher haben wir zwei Arten, oder Typen von Variablen gesehen: Zahlen und Text (Strings).
Variablen vom Typ “Text” werden gut daran erkannt, dass der Wert der Variable (also der Text) in Anführungszeichen steht.
Bei Zahlen gilt es in Python zwischen der Darstellung einer ganzen Zahl (Englisch: integer number\(\rightarrow\)int) und der Darstellung einer Dezimalzahl (Englisch: floating point number\(\rightarrow\)float) zu unterscheiden, siehe Abschnitt. Bitte beachten Sie, dass Dezimalzahlen immer mit Dezimalpunkt und nicht etwa mit einem Komma geschrieben werden, also 2.75 und nicht etwa 2,75. Kommas werden in Python als Trennzeichen in Auflistungen verwendet.
Folgendes Beispiel illustriert, wie wichtig es ist, sich des Datentyps einer Variable bewusst zu sein. Das Plus-Symbol kann, abhängig vom Kontext, unterschiedliche Bedeutungen haben:
Zahlen addieren: print(2 + 3) # gibt 5 aus
Strings verketten: print("Hallo" + " " + "Welt") # gibt "Hallo Welt" aus
Wichtig dabei ist, dass auf beiden Seiten des Plus-Zeichens (+) Werte desselben Datentyps stehen, da Python ansonsten nicht weiss, ob es addieren oder verketten soll. Daher ist es in gewissen Fällen nötig, eine Zahl in einen Text umzuwandeln, beispielsweise dann, wenn eine Zahl und ein Text im gleichen Print ausgegeben werden sollen. Hierzu verwenden wir den Befehl str(). Beispielsweise gibt uns str(15) die Zeichenkette "15".
Beispiel
Führen Sie folgenden Code in VS Code aus und beobachten Sie das Resultat im Terminal:
Eine etwas elegantere Art, Variablen in einem print mit Text zu verbinden ist, die Python-Schreibweise print(f"...") zu verwenden. Dabei wird der String mit einem f vor den Anführungszeichen eingeleitet. Innerhalb des Strings können Variablen dann in geschweifte Klammern {...} gesetzt werden, um deren Wert an dieser Stelle einzufügen. Aufgrund des vorgestellten f spricht man hierbei auch von einem f-String.
Beispiel
Führen Sie folgenden Code in VS Code aus und beobachten Sie das Resultat im Terminal:
Diese Schreibweise erlaubt es uns, Variablen innerhalb der geschweiften Klammern zu verwenden, ohne sie vorher in Strings umwandeln zu müssen. Wir beobachten allerdings, dass der Quotient nicht sehr schön formatiert wird. Wir können die Anzahl der Dezimalstellen mit der Formatierung :.2f anpassen. Dabei bezeichnet :.2f eine Dezimalzahl mit 2 Nachkommastellen. Führen Sie folgenden Code aus:
Führen Sie dne Code auch aus ohne das kleine f vor den Anführungszeichen zu setzen. Sie sollten dabei beobachten, dass der Text {n} durch {m} ist {quot:.2f} unverändert ausgegeben wird, da die Variablen nicht ausgewertet werden. Durch das kleine f vor den Anführungszeichen wird Python angewiesen, die Variablen innerhalb der geschweiften Klammern auszuwerten und deren Wert an dieser Stelle einzufügen.
Aufgabe
Schreiben Sie ein Python-Programm, welches in einer Schleife die Quotienten \(2/3\), \(3/3\), \(4/3\), etc. bis \(11/3\) berechnet und auf dem Terminal ausgibt, z.B.: "4 durch 3 ist 1.333". Verwenden Sie dazu einen f"-String und formatieren Sie die Quotienten so, dass jeweils 3 Nachkommastellen angezeigt werden.
💡 Musterlösung anzeigen
Aufgabe
Eine Dame verrät uns die dreistellige Vorwahl \(079\) ihrer \(10\)-stelligen Mobiltelefonnummer. Zudem verrät sie uns auch, dass die letzten drei Ziffern eine gerade Zahl zwischen 0 und 200 darstellen (also einen der Ausdrücke \(000, 002, 004, \ldots, 198, 200\)).
Schreiben Sie ein Python-Programm, welches alle gemäss obiger Beschreibung möglichen Nummern auflistet.
Die erste Nummer sollte \(0790000000\) sein, die letzte \(0790000200\). Das Programm soll die Telefonnummern als Zeichenkette (eine Nummer pro Zeile) ausgeben.
Tipps:
Mit str(num) wird aus der Zahl num eine Zeichenkette.
Erinnern Sie sich, was die Operation + in dem Ausdruck macht?
Abgesehen von der Null selbst, darf eine ganze Zahl in Python nicht mit einer Null beginnen.
💡 Musterlösung anzeigen
Quotienten ganzer Zahlen sind in Python floats
Im Allgemeinen ist der Quotient \(n / m\) von zwei ganzen Zahlen \(n, m\) keine ganze Zahl. In Python wird deshalb das Resultat einer Division immer als Dezimalzahl (float) angeschaut, auch wenn \(n\) durch \(m\) ohne Rest teilbar ist2:
Die folgende Schleife erzeugt einen Fehler (TypeError):
da eine Schleife nur “ganzzahlig-viele” Durchgänge durchführen kann, doch 6 / 3 ist 2.0, also vom Typ float und nicht int.
Challenge
Schreiben Sie ein Programm, welches 123456789 Sekunden in Jahre (à 365 Tage), Tage, Stunden, Minuten und Sekunden umrechnet. Das Programm soll den folgenden Text ausgeben, wobei alle Zahlen (ausser 123456789) im Programm berechnet werden: 123456789 Sekunden sind 3 Jahre, 333 Tage, 21 Stunden, 33 Minuten, 9 Sekunden!
💡 Musterlösung anzeigen
In dem folgenden Programm verwenden wir die Konvention, dass konstante Werte (wie z.B. die Anzahl Sekunden pro Minute) in Grossbuchstaben geschrieben werden:
Aufgabe
Mit welchen Datentypen würden Sie folgende Informationen über sich selbst in Python speichern?
Ihr Vorname
Ihr Alter in Jahren
Ihre Grösse in Metern
💡 Musterlösung anzeigen
Vorname string
Alter in Jahren: integer
Grösse in Metern: float
Textinput
Mithilfe der -Funktion kann der User während der Programmausführung zu einer Eingabe aufgefordert werden.
Beispiel
Mit der Funktion input("Hilfstext...") können wir eine Variable während der Programmausführung erstellen:
Führen Sie diesen Code in VS Code aus und beobachten Sie das Resultat.
Aufgabe
Schreiben Sie ein Programm, das Sie nach Ihrem Namen fragt, indem der Hilfstext "Wie heissen Sie?" auf dem Terminal ausgegeben wird. Verwenden Sie dazu die Funktion name = input("Hilfstext hier..."). Danach soll Sie das Programm neunmal begrüssen, indem es auf 3 Zeilen je dreimal den Text Hallo [Ihr Name] druckt.
💡 Musterlösung anzeigen
Input erwartet immer einen String
Bitte beachten Sie, dass die -Funktion in Python den Tastaturinput immer als String auffasst. Falls Ihr Input als Zahl angesehen werden soll, dann müssen Sie den Input x mit int(x) beziehungsweise float(x) konvertieren:
Debugging
Beim Schreiben von Code werden Sie häufig Fehler machen. Der resultierende Code lässt sich nicht ohne Fehlermeldung ausführen oder liefert nicht das gewünschte Resultat. Wir sprechen dabei von bugs (englisches Wort für Käfer), womit allgemein Fehler beziehungsweise unerwünschtes Verhalten oder unerwünschte Resultate gemeint sind. Daher ist es wichtig, zu lernen, wie man einem Problem auf die Schliche kommt. Darum handelt es sich beim sogenannten debugging um das Beheben unterschiedlicher Fehlerarten, welche in den folgenden Abschnitten kurz erklärt werden.
Syntaxfehler
Syntax-Fehler (Englisch: syntax error) sind in Programmiersprachen vergleichbar mit Rechtschreibfehlern in Aufsätzen: Es handelt sich um Schreibweisen, die nicht erlaubt sind. Beispielsweise würde folgender Code eine Fehlermeldung geben:
Der Fehler tritt aufgrund der Tatsache auf, dass nach dem Befehl print Klammern stehen müssen. Der korrekte Code würde wie folgt geschrieben:
Syntax-Fehler, also Fehler in der grammatikalischen Struktur einer Programmiersprache, führen dazu, dass der Code nicht richtig ausgeführt werden kann.
Weitere, ähnliche Fehler können etwa auftreten, weil die Klammern nicht geschlossen wurden oder weil die Anführungszeichen bei Texten vergessen wurden:
Laufzeitfehler
Laufzeitfehler (Englisch: runtime error) werden erst bei der Ausführung des Programms erkannt. Dabei stimmt zwar die grammatikalische Struktur (Syntax) des Codes, der Code ergibt aber keinen Sinn: Beispielsweise wird versucht, auf Variablen zuzugreifen, welche es gar nicht gibt. Fehler können beispielsweise aufgrund von Gross- und Kleinschreibung auftreten:
Ein weiterer Laufzeitfehler könnte wie folgt aussehen
In diesem Fall wollte der Autor des Codes den Text "Hello, World" auf dem Terminal drucken, hat jedoch die Anführungszeichen vergessen. Dies führt dazu, dass der Code die Variablen Hello und World drucken will, die es jedoch nicht gibt.
Aufgabe
Führen Sie alle obigen Beispiele in VS Code aus und beobachten Sie die Fehlermeldungen. Verstehen Sie, was mit den Fehlermeldungen gemeint ist?
💡 Musterlösung anzeigen
Keine Musterlösung notwendig.
Semantische Fehler
Semantische Fehler sind Logik-Fehler, also Fehler aufgrund der Tatsache, dass die Programmiererin Denkfehler beim Schreiben gemacht hat. In diesem Fall gibt der Code zwar keine Fehlermeldung aus, die Ausgabe des Codes entspricht jedoch nicht dem erwarteten Resultat. Beispielsweise könnte folgender Code zu einem unerwarteten Resultat führen:
Das Resultat sollte 8 sein, denn der Mittelwert von 3 und 13 ist \((3 + 13) / 2 = 8\) und nicht etwa \(3 + 13 / 2 = 9.5\). Der Fehler hat damit zu tun, dass der Programmierer vergessen hat, Klammern zu setzen. Korrekt wäre folgendes Beispiel:
Debugging-Strategien
Einige Strategien, um fehlerhaften Code zu beheben, sind:
Lesen Sie Fehlermeldungen aufmerksam und versuchen Sie diese zu verstehen. Auch die Zeilenangaben in den Fehlermeldungen sind dabei sehr hilfreich.
Brechen Sie ihren Code in einzelne Teile auf. Geben Sie Zwischenresultate auf dem Terminal aus, indem Sie print-Befehle verwenden.
Rechnen Sie einige Beispiele von Hand aus, sofern der Code etwas Komplexeres berechnet.
Testen Sie Ihren Code mit (extremen oder besonderen) Testfällen (e.g. negative Zahlen, der Null, dem leeren String).
Aufgabe
Um welche Art von Fehler handelt es sich im Code aus Abschnitt?
💡 Musterlösung anzeigen
Dies ist ein Beispiel eines semantischen Fehlers (Fehler in der Logik).
Weitere Aufgaben
Challenge
Berechnen Sie die ersten 8 Zahlen der Fibonacci-Folge, welche wie folgt aussieht:
$$
0, 1, 1, 2, 3, 5, 8, 13, 21,
$$
Dabei ist jede Zahl die Summe ihrer beiden Vorgänger in der Folge. Die ersten zwei Glieder 0 und 1 der Folge sind vorgegeben.
Verwenden Sie zur Berechnung der Fibonacci-Zahlen eine for-Schleife sowie drei Variablen.
Zeichnen Sie danach mit der Turtle eine Spirale, bestehend aus 8 Viertelkreisen3, welche als Radius jeweils das Zehnfache der zuletzt berechneten Fibonacci-Zahl \(1, 2, 3, 5, 8, 13, \ldots\) haben.
Die Spirale sollte folgendermassen aussehen:
💡 Musterlösung anzeigen
Diese Musterlösung finden Sie in Abschnitt.
Challenge
Das Programm unten zeigt einen Farbverlauf. Versuchen Sie nachzuvollziehen, wie das Programm funktioniert, und ändern Sie es so ab, dass zwei Kreise mit einem Farbverlauf entstehen, einmal von Rot nach Blau und einmal von Schwarz nach Weiss.
# File: farbverlauf_vorlage.pyimport turtle as t# der folgende Befehl sorgt dafür,# dass die RGB Werte von 0 bis 255 angegeben werden können# anstatt von 0 bis 1t.colormode(255)# Anfangsfarbe grünr =0g =255b =0# Es sollen 50 Punkte gezeichnet werden, die immer kleiner werden# der Durchmesser des ersten Punktes soll 500 seindurchmesser =500for _ inrange(50): t.pencolor(r, g, b) t.dot(durchmesser) durchmesser -=10 g -=5t.done()
Note
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
💡 Musterlösung anzeigen
Diese Musterlösung finden Sie in Abschnitt.
Challenge
Das Programm unten kann eine Dezimalzahl, die kleiner als 1024 ist, in eine Binärzahl umwandeln. Ändern Sie das Programm so ab, dass es folgende Anforderungen erfüllt:
Der Benutzer soll die Dezimalzahl eingeben können (verwenden Sie dazu die input-Funktion).
Das Programm soll auch für Dezimalzahlen funktionieren, die im Binärsystem 16 Stellen benötigen (also Dezimalzahlen bis 65535).
Das Programm soll die Binärzahl als String ausgeben (also z.B. "0000000000001010" für die Dezimalzahl 10).
💡 Musterlösung anzeigen
Diese Musterlösung finden Sie in Abschnitt.
%
Längere Lösungen
💡 Musterlösung anzeigen
[mychallenge:fibonacci_spirale]
# File: challenge_fib.pyimport mathimport turtle as tt.speed(10000)# Anzahl zu zeichnender "Viertelkreis"anzahl_halbkreise =8# wir stellen einen Viertelkreis durch einen Viertel# eines Vielecks dar (je mehr Ecken desto genauer)anzahl_ecken_viertel =40# Startwerte der Fibonacci-Folgef_0 =0f_1 =1for _ inrange(anzahl_halbkreise):# f_2 ist die nächste Zahl der Fibonacci-Folge f_2 = f_0 + f_1# Kreis radius = f_2 *10 umfang =2* radius * math.pi# Kantenlänge des Vielecks kantenlaenge_vieleck = umfang / (4* anzahl_ecken_viertel)for _ inrange(anzahl_ecken_viertel): t.fd(kantenlaenge_vieleck)""" nach einem Viertelkreis haben wir uns um 90 Grad gedreht an jeder Ecke müssen wir deshalb um 90 Grad / anzahl_ecken_viertel drehen """ t.rt(90/ anzahl_ecken_viertel)# Update der Vorgänger f_0 = f_1 f_1 = f_2t.done()
Note
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
💡 Musterlösung anzeigen
[mychallenge:farbverlauf]
# File: farbverlauf.pyimport turtle as t# der folgende Befehl sorgt dafür,# dass die RGB Werte von 0 bis 255 angegeben werden können# anstatt von 0 bis 1t.colormode(255)# setze die Turtle etwas nach linkst.teleport(-250, 0)# Anfangsfarbe grünr =255g =0b =0# Es sollen 50 Punkte gezeichnet werden, die immer kleiner werden# der Durchmesser des ersten Punktes soll 500 seindurchmesser =500for _ inrange(50): t.pencolor(r, g, b) t.dot(durchmesser) durchmesser -=10 r -=5 b +=5# setze die Turtle etwas nach rechtst.teleport(250, 0)# Anfangsfarbe grünr =0g =0b =0# Es sollen 50 Punkte gezeichnet werden, die immer kleiner werden# der Durchmesser des ersten Punktes soll 500 seindurchmesser =500for _ inrange(50): t.pencolor(r, g, b) t.dot(durchmesser) durchmesser -=10 r +=5 b +=5 g +=5t.done()
Note
💡 Hinweis: Dieses Skript verwendet grafische Desktop-Bibliotheken (turtle / pygame). Führen Sie diesen Code in Ihrer lokalen Entwicklungsumgebung (z.B. VS Code) aus.
💡 Musterlösung anzeigen
[mychallenge:dez_zu_bin]
}
Footnotes
Mit anderen Worten: Ihre Differenz ist ein ganzzahliges Vielfaches von 7.↩︎
Das Konzept von Teilbarkeit ergibt in den reellen oder rationalen Zahlen keinen Sinn.↩︎
Natürlich zeichnen wir hier regelmässige Polygone und keine echten Viertelkreise.↩︎