Benutzer-Werkzeuge

Webseiten-Werkzeuge


neuerlehrplan:klasse10:schleifen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
neuerlehrplan:klasse10:schleifen [2025/09/13 11:16] – [Zählschleifen in Python] lutzneuerlehrplan:klasse10:schleifen [2025/09/13 16:22] (aktuell) – [Übungen] lutz
Zeile 1: Zeile 1:
 ======Schleifen====== ======Schleifen======
 +
 +Die Beispiele aus diesem Abschnitt können in einem Jupyternotebook nachvollzogen werden. Es muss zusammen mit den Bilddateien vorher entpackt werden.
 +
 +<WRAP center round download 60%>
 +{{ :neuerlehrplan:klasse10:schleifen.zip |Notebook Schleifen}}
 +</WRAP>
 +
 +Danach kann man das Notebook zusammen mit den Bildern z.B. bei https://jupyter.org/try -> JupyterLab hochladen und öffnen.
  
 Häufig wiederholen sich Anweisungen in Algorithmen. Solche Anweisungen lassen sich in der Datenstruktur Schleife zusammenfassen. Die Frage ist nun, wie oft die Anweisungen wiederholt werden sollen. Auf diese Frage gibt es mehrere Antworten: Häufig wiederholen sich Anweisungen in Algorithmen. Solche Anweisungen lassen sich in der Datenstruktur Schleife zusammenfassen. Die Frage ist nun, wie oft die Anweisungen wiederholt werden sollen. Auf diese Frage gibt es mehrere Antworten:
Zeile 92: Zeile 100:
  
 ''%%Startwert%%'' und ''%%Schrittweite%%'' können weggelassen werden. Es wird dann angenommen, dass der ''%%Startwert%%'' den Wert 0 hat und die ''%%Schrittweite%%'' den Wert 1 hat. Fehlt nur ein Parameter, so wird angenommen, dass die ''%%Schrittweite%%'' fehlt. ''%%range%%'' erzeugt nun eine Folge von Werten, die mit dem ''%%Startwert%%'' beginnt. Der jeweils nächste Wert ergibt sich, indem man zu einem Wert die ''%%Schrittweite%%'' addiert. Das wird wird immer weiter fortgesetzt, solange ein Wert noch keiner ist als der ''%%Endwert%%'' ''%%Startwert%%'' und ''%%Schrittweite%%'' können weggelassen werden. Es wird dann angenommen, dass der ''%%Startwert%%'' den Wert 0 hat und die ''%%Schrittweite%%'' den Wert 1 hat. Fehlt nur ein Parameter, so wird angenommen, dass die ''%%Schrittweite%%'' fehlt. ''%%range%%'' erzeugt nun eine Folge von Werten, die mit dem ''%%Startwert%%'' beginnt. Der jeweils nächste Wert ergibt sich, indem man zu einem Wert die ''%%Schrittweite%%'' addiert. Das wird wird immer weiter fortgesetzt, solange ein Wert noch keiner ist als der ''%%Endwert%%''
 +
 +Hier einige Beispiele. In den Beispielen wird die Ausgabe von ''%%range%%'' in eine Liste umgewandelt. Zu Listen erfährst du weiter unten mehr.
 +
 +<code python>
 +print(list(range(1,9,3)))
 +print(list(range(1,10)))
 +print(list(range(8)))
 +</code>
 +
 +Ausgabe des Programms:
 +
 +<code python>
 +[1, 4, 7]
 +[1, 2, 3, 4, 5, 6, 7, 8, 9]
 +[0, 1, 2, 3, 4, 5, 6, 7]
 +</code>
 +
 +Im Zusammenhang mit einer sogenannten for-Schleife benutzt man range nun wie folgt: 
 +
 +<code python>
 +for i in range(Startwert, Endwert, Schrittweite):
 +    ... Anweisungen ... 
 +</code>
 +
 +Die Variable i nimmt nun bei jeden Schleifendurchlauf einen von range erzeugten Wert an. Man kann nun i mit dem jeweiligen Wert in der Schleife benutzen oder man benutzt das Konstrukt einfach, um die Anzahl der Durchläufe festzulegen.
 +
 +**Beispiel 2**
 +
 +Schreibe ein Programm, welches eine Liste der Quadratzahlen bis 20 ausgibt.
 +
 +**Struktogramm**
 +
 +{{ :neuerlehrplan:klasse10:1_06_beispiel02.png?direct&600 |}}
 +
 +**Lösung**
 +
 +<code python>
 +# Beispiel 2
 +print("Zahl","Quadratzahl")
 +for i in range(1,21):
 +    print(i,"\t",i*i)
 +</code>
 +
 +====Die for-Anweisung und Listen====
 +
 +Bereits weiter oben habe ich den Datentyp **Liste** erwähnt. Listen gehören in Python zu den zusammengesetzten Datentypen. Eine Liste kann man sich als einen Behälter für mehrere Werte vorstellen. Diese Werte können unterschiedliche Datentypen haben Sie können sogar selbst wieder Listen sein. Listen erkennt man in Python durch eckige Klammern. In den Klammern werden die Werte durch ein Komma getrennt. 
 +
 +**Beispiel 3**
 +
 +<code python>
 +[1,23,7,4]
 +["Hallo",4,34.2,True]
 +</code>
 +
 +In der ersten Liste sind nur ganze Zahlen als Werte enthalten. In der zweiten Liste stehen Werte unterschiedlicher Datentypen.
 +
 +Eine Liste kann man mit dem Zuweisungsoperator ''%%=%%'' erzeugen.
 +
 +**Beispiel 4**
 +
 +<code python>
 +liste1 = [1,23,7,4]
 +liste2=["Glauchau","Meerane","Waldenburg", "Mülsen", "Thurm"]
 +liste3=[[1,2,3],[4,5,6],[7,8,9]]
 +liste4=[] #leere Liste
 +</code>
 +
 +Auch das Anlegen einer leeren Liste kann sinnvoll sein, wenn man durch Anhängen von weiteren Listenelementen eine Liste aufbauen will.
 +
 +**Beispiel 5**
 +
 +Wir betrachten die Liste
 +
 +<code python>
 +liste1=[1,23,21,23,12]
 +</code>
 +
 +Die gesamte Liste lässt sich mit Hilfe der print-Anweisung ausgeben: 
 +
 +<code python>
 +print(liste1)
 +</code>
 +
 +Ausgabe:
 +
 +<code python>
 +[1, 23, 21, 23, 12]
 +</code>
 +
 +Auf einzelne Listenelemente kann man durch Angabe der Nummer (den Index) des Listenelements zugreifen. Die Nummer steht dabei nach dem Listennamen in eckigen Klammern. Die Zählung beginnt bei 0. 
 +
 +<code python>
 +print(liste1[2])
 +</code>
 +
 +Ausgabe:
 +
 +<code python>
 +21
 +</code>
 +
 +
 +Listen sind in Python ein sogenannte abzählbarer (itterierbarer) Datentyp. Neben Listen gibt es in Python noch weitere solche Datentypen (z.B. Tupel). Mit der ''%%for%%''-Anweisung kann man nun ohne die Verwendung von ''%%range%%'' eine Schleife über alle Elemente eines solchen Datentyps laufen lassen.
 +
 +
 +**Beispiel 6**
 +
 +<code python>
 +liste = [3, 5.5, "Python ist cool!", False]
 +for wert in liste:
 +    print(wert)
 +</code>
 +
 +=====Endlosschleifen=====
 +
 +Wenn ich im Schleifenkopf schreibe 
 +
 +<code python>
 +while True:
 +    ... Anweisungen ... 
 +</code>
 +
 +ist die Schleifenbedingung immer erfüllt und die Schleife endet nie. Es entsteht eine Endlosschleife. Diese widerspricht eigentlich der Algorithmeneigenschaft Endlichkeit.
 +
 +Es gibt aber Möglichkeiten, wie man eine solche Schleife anders beenden kann:
 +
 +<WRAP center round box 60%>
 +  * Die Anweisung **break** beendet eine Schleife.
 +  * Die Anweisung **continue** beendet den aktuellen Schleifendurchlauf und beginnt mit dem nächsten.
 +</WRAP>
 +
 +**Beispiel 7**
 +
 +<code python>
 +while True:
 +    zahl = int(input("Zahl: "))
 +    print("Quadratzahl:",zahl*zahl)
 +    eingabe = input("Soll das Programm fortgesetzt werden? (J|N)")
 +    if eingabe == 'N':
 +        break
 +</code>
 +
 +===== Übungen =====
 +
 +Im folgenden Jupyternotebook finden sich einige Übungsaufgaben zum Thema.
 +
 +<WRAP center round download 60%>
 +{{ :neuerlehrplan:klasse10:schleifen_uebungen.zip |Übungen}}
 +</WRAP>
 +
neuerlehrplan/klasse10/schleifen.1757754990.txt.gz · Zuletzt geändert: von lutz