Übungsaufgabe zur for-Schleife in Python: Weihnachtsbaum in Python programmieren

Sei die Erste, die diesen Beitrag teilt!

Alle Jahre wieder … Um uns gemeinsam auf die Weihnachtszeit vorzubereiten, möchte ich mit euch einen Weihnachtsbaum in Python programmieren. Diese Übungsaufgabe gehört zu den Klassikern unter den Programmieraufgaben. Manche nennen die Aufgabe auch einfach: „Programmiere ein Dreieck aus Sternen!“ Aber da wir in der Vorweihnachtszeit stecken, sage ich Weihnachtsbaum. Mit dieser Übungsaufgabe zur for-Schleife in Python kannst du also nicht nur einen schönen „Weihnachtsbaum“ erstellen, sondern auch die sogenannte for-Schleife vertiefen und üben. Los geht’s. Ich zeige dir, was wir heute zusammen machen wollen.


Los geht’s. Ich werde Schritt für Schritt mit dir einen Weihnachtsbaum programmieren. Wenn du die Lösung direkt anschauen willst, klicke hier und springe direkt dorthin.

Endresultat: Weihnachtsbaum in Python

Unser Ziel mit diesem Beitrag ist es, gemeinsam einen Weihnachtsbaum in Python zu programmieren. Dazu wollen wir grundlegende Funktionen nutzen, insbesondere eine sogenannte for-Schleife.

Und so soll das Ganze am Ende aussehen:

Weihnachtsbaum in Python
Weihnachtsbaum in Python

Am Ende erscheint auf unserer Konsole ein „Weihnachtsbaum“ der aus Sternen besteht. Es gibt insgesamt sechs Reihen an Sternen. Natürlich hätte ich auch eine beliebige andere Anzahl von Reihen verwenden können. Du kannst auch einen riesen Baum mit 100 Reihen programmieren. Aber für das Verständnis reichen uns erstmal sechs Reihen.


Schritt 1: for-Schleife programmieren

Wir wissen aus den Vorüberlegungen schon eine wichtige Sache. Wir wollen Sterne auf der Konsole erscheinen lassen. Dazu verwenden wir die print-Funktion. Wir müssen

print(„*“)

eingeben um einen Stern erscheinen zu lassen.

Der Baum hat sechs Zeilen, also brauchen wir sechs Mal die print-Funktion um Sternchen zu bekommen. Da wir das in sechs Zeilen nacheinander haben wollen, kommt eine Schleife ins Spiel. Ich werde mich hier für eine for-Schleife entscheiden.

Eine andere Möglichkeit wäre eine while-Schleife. Da ich allerdings schon im Vorfeld genau weiß, wie oft ich etwas wiederholen möchte, wähle ich die for-Schleife.

Die Zahlen von 1 bis 6 können wir in Python in einer Liste speichern [1,2,3,4,5,6] beziehungsweise abgekürzt schreiben wir range(1,7). Mit dem Befehl range erstellt Python automatisch eine Liste, die von der linken Zahl bis zur hinteren Zahl Minus 1 geht.

Klingt kompliziert, ist aber eigentlich ganz einfach. Mit range(1,5) bekommst du die Liste [1,2,3,4] zum Beispiel. Wenn du nur eine Zahl reinschreibst, startet die Liste automatisch bei Null. Aber genug von Listen, das ist ein anderes Thema. 🙃

Wir wollen jetzt also alle Zahlen aus der Liste range(1,7) einmal durchgehen und jedes Mal Sternchen auf der Konsole erscheinen lassen. Wir nehmen einfach den Buchstaben i als Zählervariable, die die Zahlen von 1 bis 6 durchgehen soll.

Der Pythoncode lautet dann

for i in range(1,7):

Das bedeutet, alles was nun nach dieser Zeile geschrieben wird und eingerückt ist, wird sechs Mal ausgeführt. Dabei geht der Zähler i immer einen Schritt weiter. Und wiederholt dann erneut, was innerhalb der for-Schleife steht.

Disclaimer: Falls du an dieser Stelle denkst „Hä?! Ich habe das doch ganz anders gelernt?“ Wundere dich nicht. Viele Wege führen nach Rom. Ich zeige dir in diesem Beitrag genau eine Möglichkeit. Wenn du noch andere Möglichkeiten selbst herausfindest, einen Weihnachtsbaum in Python zu programmieren, ist das super. Und das ist sogar wünschenswert. Nur, wenn du deine eigenen Lösungen findest wirst du irgendwann selbstständig programmieren können!

Vorläufiger Programmcode

Fügen wir nun unsere bisherigen Ergebnisse zusammen. Wir schreiben unsere Zeile für die for-Schleife und dann in der nächsten Zeile (eingerückt!) steht, was in jedem Durchgang der Schleife passieren soll.

for-Schleife mit range in Python
for-Schleife mit range in Python

Schön, wir haben sechs Reihen mit jeweils einem Stern auf der Konsole erscheinen lassen.

Wichtig! Alles was in der for-Schleife passieren soll wird eingerückt.

Wenn du es bis hierher verstanden hast, kannst du dir auf die Schulter klopfen. Das war schon der größte Teil unserer Weihnachtsbaum-Übungsaufgabe zur for-Schleife in Python.


Schritt 2: In jeder Reihe eine andere Anzahl an Sternen erscheinen lassen

Klar, wir müssen irgendwie unser Argument in der print-Funktion verändern. Wir wollen nicht nur einen Stern, sondern in jeder Zeile mehr Sterne. In Zeile 1, ein Stern. In Zeile 2, drei Sterne, usw. Das heißt x mal einen Stern, sprich x * „*“ auf der Konsole ausgeben lassen.

Was muss nun x sein?

Es werden ja von Zeile zu Zeile mehr Sterne. Wir könnten bei jedem Durchlauf der for-Schleife also x = 2 * i setzen. Das heißt wir würden beim ersten Durchlauf 2 Sterne, beim zweiten Durchlauf 4 Sterne und so weiter.

Das ist fast richtig. Schauen wir aber unser Bild an sehen wir: 1 Stern, 3 Sterne, 5 Sterne, 7 Sterne, 9 Sterne und 11 Sterne. Also immer das Doppelte von i, aber nochmal 1 abgezogen. Insgesamt ergibt sich:

x = 2 * i – 1.

Diese Methode solltest du dir merken. Mit 2 * i bekommst du alle geraden Zahlen. Wenn du dann noch Plus oder in diesem Fall Minus 1 rechnest, bekommst du die ungeraden Zahlen.

Schauen wir uns den Code und die Ausgabe an:

Nur Sterne mit ungeraden Zahlen, Python for-Schleife Übung Weihnachtsbaum
Nur Sterne mit ungeraden Zahlen

Super. Wir haben es fast geschafft. Unser Baum ist schon fast perfekt. Ich habe eine Variable x eingeführt und sie gibt die Zahl an, wie viele Sterne wir brauchen.

Im Argument der print-Funktion steht dann x mal Stern.

Allerdings ist der Baum noch nicht zentriert. Wir möchten nicht, dass die Sterne immer direkt am Anfang stehen. Es müssen zuerst noch Leerzeichen eingefügt werden.



Schritt 3: Die richtigen Leerzeichen in jeder Zeile

Wie viele Leerzeichen brauchen wir denn? In der letzten Zeile sind es 11 Sterne. Und die brauchen auch kein weiteres Leerzeichen.

In der ersten Zeile gibt es nur einen Stern. Dieser sollte genau in der Mitte stehen. Das heißt fünf Leerzeichen, dann der Stern.

In der zweiten Zeile brauchen wir vier Leerzeichen, dann kommen die drei Sterne. Und so weiter.

Was bemerken wir? die Anzahl der Leerzeichen wird kleiner. Und zwar abwärts von 5 bis 0. Das erinnert uns stark an die Länge der Liste durch die unser i in der for-Schleife läuft. Diese hat die Länge sechs.

Wir müssen also immer so viele Leerzeichen machen wie die Liste lang ist und davon die Zahl i abziehen.

  • 1. Zeile 6 Minus 1 = 5 Leerzeichen,
  • 2. Zeile 6 Minus 2 = 4 Leerzeichen,
  • 3. Zeile 6 Minus 3 = 3 Leerzeichen,
  • 4. Zeile 6 Minus 4 = 2 Leerzeichen,
  • 5. Zeile 6 Minus 5 = 1 Leerzeichen,
  • 6. Zeile 6 Minus 6 = 0 Leerzeichen.

Das ist am Anfang bestimmt etwas schwierig zu verstehen. Wir laufen sozusagen die Zahlen rückwärts durch und fügen so viele Leerzeichen ein wie wir brauchen.

Um die Länge der Liste zu verwenden gibt es den Befehl len(). In unserem Beispiel verwenden wir

len(range(1,7)).

Die Länge dieser Liste ist sechs. Also genau die Zahl die wir brauchen für unsere Leerzeichen.

Die fertige Lösung sieht dann so aus:

Weihnachtsbaum in Python
Weihnachtsbaum in Python

Ich empfehle dir mal selbst zu versuchen diesen Code zu programmieren. Am ehesten lernst du etwas Neues, wenn du es selbst anwendest. Wenn du wissen willst, wie du Python installieren kannst, klicke hier. Falls du Python nicht installieren willst, kannst du es auch online verwenden. Siehe mein Beitrag zu Online-Compilern hier.

Optimierung: Wie können wir den Code weiter verbessern?

Ich finde unseren Code bereits sehr kurz und knackig. Aber eine Sache müssen wir verbessern, wenn wir gute Coder werden wollen.

Wir verwenden zweimal die Liste range(1,7) und rufen sie auf. Wenn ich nun einen größeren Weihnachtsbaum erstellen will, zum Beispiel mit 100 Zeilen. Dann muss ich an mehreren Stellen meinen Code ändern. Das ist nicht gut.

Deshalb definieren wir eine Variable, die die Liste enthält. Wollen wir später was ändern, dann müssen wir die Variable nur einmal überschreiben.

Definiere Variable "zeilen"
Definiere Variable „zeilen“

Ich habe eine Variable zeilen definiert. Wenn ich nun einen größeren Baum haben will, muss ich nur die Variable ändern und der Rest bleibt gleich.

Das gehört zu einem guten Programmierstil. Falls du noch ganz am Anfang deiner Programmierkarriere bist, dann ist es noch nicht so wichtig. Man sollte aber grundsätzlich versuchen, so wenig wie möglich den gleichen Befehl schreiben zu müssen. Sobald du merkst, dass du eine Sache mehr als einmal benötigst, solltest du eine zusätzliche Variable dafür definieren oder anders versuchen die Wiederholung zu umgehen.

Alternativer Lösungsweg: while-Schleife

Wie bereits weiter oben erwähnt, gibt es auch alternative Lösungen. Viele Wege führen nach Rom. Deshalb gebe ich dir hier meine Lösung unter Verwendung einer while-Schleife.

Weihnachtsbaum mit while-Schleife

Kannst du den Unterschied zur for-Schleife erkennen? Wir mussten die Zählervariable i im Vorfeld definieren. Außerdem müssen wir am Ende des while-Blocks diese Variable i bei jedem Durchlauf der Schleife um 1 erhöhen.

Eine while-Schleife ist eine sogenannte vorprüfende Schleife. Ein Durchgang wird beendet und dann wird bevor die Schleife von vorne durchläuft geschaut, ob die Bedingung, die nach dem „while“ steht noch erfüllt ist.

In diesem Fall steht dort i < 7. Das heißt bevor die Schleife durchläuft wird geschaut, wie groß ist der Wert der Variablen i nun? Ist der Wert kleiner als 7 geht das Ganze nochmal durch. Anstatt i < 7 hätte ich auch i <= 6, also i kleiner oder gleich 6, schreiben können.

Auch hier könnte man für die Anzahl der Zeilen eine neue Variable einführen, anstatt range(1,7) innerhalb des while-Blocks zu schreiben. Das wäre definitiv eleganter. Für Anfänger ist es aber häufiger leichter verständlich, wenn so wenig Variablen wie möglich definiert werden.


Hast du deinen Weihnachtsbaum oder „Sternendreieck“ in Python hingekriegt? Lass gerne einen Kommentar da, falls du Probleme hast. Oder natürlich auch mit jeglichen anderen Anregungen.

Hier findest du noch weitere Übungsaufgaben in Python für Anfänger mit Lösungen, die auf der print-Funktion aufbauen. Außerdem kannst du hier stöbern und meine übrigen Artikel zum Thema Python lesen.



Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen