Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ~~NOTOC~~ ===== Lernziele heute ===== Sollten attraktiv und verständlich sein. * ''while''-Schleifen kennenlernen (bereits informell im Zeichenprogramm verwendet) * ''for''-Schleifen kennenlernen * ... und wie man diese sinnvoll verwendet * Test des Prüfungsformats (vermutlich per FORMS) ====== Schleifen ====== <WRAP center round info 100%> In Python gibt es drei Arten von Schleifen: * ''repeat''-Schleifen ((Genaugenommen gibt es diese Struktur nur in unserem "Java-Dialekt" Jython von Python.)) * ''while''-Schleifen * ''for''-Schleifen Was eine ''repeat''-Schleife ist, wissen wir seit der ersten Doppellektion. </WRAP> ===== ''while''-Schleifen ===== <WRAP center round info 100%> Eine ''while''-Schleife wird mit dem Schlüsselwort ''while'' (für deutsch //solange//) eingeleitet und hat die folgende Struktur (beachte den Doppelpunkt und die Einrückung): <code python> while <Ausführ-Bedingung>: # der sogenannte Kopf der Schleife <Code-Block, der so lange wiederholt ausgeführt wird, # der sogenannte Körper der Schleife wie die Ausführ-Bedingung erfüllt ist. Dieser Code-Block ist um vier Leerschläge eingerückt> </code> Vergleich mit ''if''-Selektion: Wenn man ''while'' durch ''if'' ersetzt, wird der eingerückte Code-Block genau einmal durchgeführt, wenn die Ausführ-Bedingung erfüllt ist. Bei der ''while''-Schleife wird dieser solange ausgeführt, wie die Ausführbedingung erfüllt ist. </WRAP> ===== Aufgabe 1, erste Erfahrungen mit ''while''-Schleifen ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** - Teste das folgende Programm. - Was passiert, wenn du die letzte Zeile nicht einrückst? - Was passiert, wenn du die beiden letzten Zeile miteinander vertauschst? - Was passiert, wenn du die Zeile ''x = x + 3'' löschst (oder mit ''#'' auskommentierst)? - Ändere das Programm so, dass es alle Zahlen zwischen 5 und 19 ausgibt (einschliesslich der beiden Grenzen 5 und 19). Dabei soll natürlich weiterhin eine ''while''-Schleife verwendet werden. - Ändere das Programm so, dass es alle Potenzen von 2 ausgibt (also 1, 2, 4, 8, 16, etc.), die kleiner als 100000 sind. Dabei soll natürlich weiterhin eine ''while''-Schleife verwendet werden. <code python> x = 0 while x < 20: x = x + 3 print(x) </code> </WRAP> ===== Aufgabe 2, Ausgabe in einer Zeile (Ausgabe-String schrittweise aufbauen) ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** Im Programm aus der vorigen Ausgabe ist es nicht so schön, dass jede neue Zahl in einer neuen Zeile ausgegeben wird. Wenn man alle Zahlen in einer Zeile ausgeben möchte, kann man dies beispielsweise erreichen, indem man die Zeichenkette, die am Ende ausgegeben werden soll, innerhalb der ''while''-Schleife schrittweise aufbaut und erst nach Beendigung der Schleife ausgibt. Man beginnt den Aufbau mit der "leeren Zeichenkette". <code python> x = 0 ausgabeZeichenkette = "" # Zeichenkette der Länge Null (auch leere Zeichenkette genannt); zwischen den beiden begrenzenden Anführungszeichen steht kein Zeichen while x < 20: x = x + 3 ausgabeZeichenkette = ausgabeZeichenkette + str(x) + ", " print(ausgabeZeichenkette) </code> Ändere dieses Programm so, dass vom Benutzer eine Zahl eingelesen wird und dann alle Quadrate der Zahlen von 1 bis zu dieser Zahl in einer Zeile ausgegeben werden (bitte weiterhin die ''while''-Schleife verwenden). Bei Eingabe 10 soll die Ausgabe wie folgt aussehen: <code text> 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, </code> </WRAP> ===== Vorbereitung zur ''for''-Schleife ===== <WRAP center round info 100%> Die Funktion ''range'' (deutsch //Bereich//) nimmt als Parameter eine ganze Zahl entgegen und liefert eine sogenannte **Liste**. Teste dies am folgenden Programm: <code python> x = range(11) print(x) print(range(6)) </code> Beachte, dass die Liste bei 0 startet (und NICHT bei 1) und NICHT beim angegebenen Parameter endet, sondern eine Zahl vorher. Es ist auch möglich, der Funktion ''range'' zwei Parameter zu übergeben (der erste sollte kleiner sein als der zweite). Dann wird eine Liste erzeugt, die beim ersten Parameter startet und eins vor dem zweiten Parameter endet. Teste dies am folgenden Programm <code python> x = range(4, 11) print(x) print(range(-3, 6)) </code> Mit anderen Worten liefern ''range(13)'' und ''range(0, 13)'' dieselbe Liste. </WRAP> ===== Aufgabe 3, ''for''-Schleife kennenlernen ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** Teste das folgende Programm. <code python> for x in range(6): # der sogenannte Kopf der Schleife print(x) # der sogenannte Körper der Schleife </code> Beim Ausführen dieser ''for''-Schleife nimmt die sogenannte **Laufvariable** ''x'' nacheinander alle Werte der Liste ''range(6)'' an, wobei jeweils der Schleifenkörper ausgeführt wird. - Ändere ''range(6)'' in ''range(4, 13)''. - Ändere den Namen der Laufvariable ''x'' in ''zahl'' und gib in jedem Schleifendurchlauf das Quadrat von ''zahl'' aus. - Bonus: Überlege dir, dass man jede ''for''-Schleife auch als ''while''-Schleife realisieren kann. </WRAP> ===== Aufgabe 4, Baum variabler Grösse als Textgrafik ausgeben ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** Verstehe das folgende Programm. <code python> for i in range(5): print(i * " " + "H" + (5-i) * "all" + "o Ba" + i * "na") </code> Schreibe nun ein Programm, das vom Benutzer eine Zahl ''n'' entgegennimmt und dann einen Baum mit ''n'' "Blattschichten" und Stammlänge ''2'' zeichnet. Bei Eingabe 5 soll die Ausgabe so aussehen: <code text> X XXX XXXXX XXXXXXX XXXXXXXXX X X </code> </WRAP> ===== Aufgabe 5, Zahlen aufsummieren ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** Schreibe mit Hilfe einer ''if''-Schleife ein Programm, das vom Benutzer eine Zahl entgegennimmt und die Summe aller Zahlen von 1 bis zu dieser Zahl ausrechnet. Beispiel: Bei Eingabe 10 soll die Ausgabe lauten: <code text> Die Summe der Zahlen von 1 bis 10 ist 55. </code> <hidden Bonusaufgabe: (Bitte ausklappen!)> Ändere dein Programm so, dass bei Eingabe 10 die Ausgabe wie folgt lautet (und analog für andere Eingaben): <code text> Ich habe das Folgende berechnet: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55 </code> <hidden Hinweis:> Baue den Ausgabestring schrittweise auf </hidden> Wenn du willst, kannst du auch die Summe der Quadrate berechnen, also beispielsweise <code text> Ich habe das Folgende berechnet: 1 + 4 + 9 + 16 + 25 + 36 = 91 </code> </hidden> </WRAP> ===== Aufgabe 6, verschiedene "Divisionszeichen" verstehen ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 5 Minuten** Es gibt in Python drei Arten der Divison in Python, nämlich ''<nowiki>/</nowiki>'', ''<nowiki>//</nowiki>'' und ''<nowiki>%</nowiki>''. Verstehe diese, indem du mit dem folgenden Programm herumspielst; ändere etwa die Zahlen! <code python> x = 23 / 5 y = 23 // 5 z = 23 % 5 print(x) print(y) print(z) </code> <hidden Hier ist die Lösung versteckt. Erst selbst denken!> * ''<nowiki>/</nowiki>'' ist die "normale" Division * ''<nowiki>//</nowiki>'' ganzzahlige Division: Wie oft passt die eine Zahl maximal in die andere hinein? (vergiss Nachkommastellen) * ''<nowiki>%</nowiki>'' liefert den Rest bei der ganzzahligen Division </hidden> </WRAP> ===== Aufgabe 7, Teiler einer Zahl ausgeben ===== <WRAP center round todo 100%> **Einzelarbeit, ca. 10 Minuten** Schreibe ein Programm, das vom Benutzer eine Zahl (damit meinen wir eine positive Nicht-Kommazahl) einliest und all ihre Teiler ausgibt. Beispiel: Bei Eingabe 24 soll die Ausgabe wie folgt aussehen. <code text> Die Teiler von 24 sind: 1, 2, 3, 4, 6, 8, 12, 24, </code> <hidden Hinweis (bitte aufklappen)> <hidden Hinweis (bitte aufklappen)> Verwende das "Divisions-Zeichen" ''%'', das den Rest der ganzzahligen Division liefert, um zu testen, ob eine Zahl ein Teiler einer anderen Zahl ist. </hidden> Eine Zahl ''x'' ist genau dann ein Teiler von ''y'', wenn ''y % x == 0'' gilt </hidden> <hidden Bonusaufgabe: (Bitte ausklappen!)> Gib zusätzlich aus, wie viele Teiler die Zahl hat. </hidden> </WRAP> ===== Hausaufgabe (Thema - kann eventuell während der Lektion begonnen werden) ===== <WRAP center round todo 100%> Lerne auf die Prüfung! * Beachte die Lösungsvorschläge, die stets am Ende der Web-Seiten stehen, meist in "Ausklapp-Boxen". * Bitte melden, wenn Lösungen fehlen oder unklar sind oder sonstige Fragen aufkommen. Am schnellsten geht das über meine Email-Adresse an der Kanti am Burggraben <WRAP center round box 60%> MeinVorname.MeinNachname@ksbg.ch </WRAP> (Meine Brühl-Adresse und Teams checke ich nicht so oft. Mein Name steht unten rechts auf dieser Seite.) </WRAP> ===== Zusammenfassung ===== <hidden Erst selbst überlegen!> * Ich kann ''while''- und ''for''-Schleifen programmieren und sinnvoll einsetzen. * Ich kann Ausgabe sinnvoll formatieren, z. B. in einer Zeile statt mehrzeilig. </hidden> ===== Bonusaufgabe ===== <WRAP center round todo 100%> Verwende ''while''- oder ''if''-Schleife zur Turtle-Steuerung. </WRAP> ===== Fragebox - auch zum Besprechen von Programmen während der Lektion (NICHT für Hausaufgaben) ===== Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag ''#'' als Kommentareinleitungszeichen am Zeilenanfang). [[https://bldsg-my.sharepoint.com/:f:/g/personal/olaf_schnuerer_ksbg_ch/EmLIcTN64lJIlEKu0EyiDYoBg9smMusTs1nVj04-F1tEFQ|Link zur Fragebox]] ===== Lösungsvorschläge ===== <hidden zu ergänzen> <code python> </code> </hidden> ===== Link zur Kursseite ===== [[lehrkraefte:snr:informatik:bruehl-2022:|Zur Kursseite]] lehrkraefte/snr/informatik/bruehl-2022/schleifen-erster-versuch.txt Last modified: 2022/03/25 09:12by Olaf Schnürer