lehrkraefte:snr:informatik:bruehl-2022:schleifen-erster-versuch

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

In Python gibt es drei Arten von Schleifen:

  • repeat-Schleifen 1)
  • while-Schleifen
  • for-Schleifen

Was eine repeat-Schleife ist, wissen wir seit der ersten Doppellektion.

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):

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>    

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.

Einzelarbeit, ca. 10 Minuten

  1. Teste das folgende Programm.
  2. Was passiert, wenn du die letzte Zeile nicht einrückst?
  3. Was passiert, wenn du die beiden letzten Zeile miteinander vertauschst?
  4. Was passiert, wenn du die Zeile x = x + 3 löschst (oder mit # auskommentierst)?
  5. Ä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.
  6. Ä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.
x = 0
while x < 20:
    x = x + 3     
    print(x)

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”.

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)

Ä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:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100,

Die Funktion range (deutsch Bereich) nimmt als Parameter eine ganze Zahl entgegen und liefert eine sogenannte Liste. Teste dies am folgenden Programm:

x = range(11)
print(x)
print(range(6))

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

x = range(4, 11)
print(x)
print(range(-3, 6))

Mit anderen Worten liefern range(13) und range(0, 13) dieselbe Liste.

Einzelarbeit, ca. 10 Minuten

Teste das folgende Programm.

for x in range(6):                      # der sogenannte Kopf der Schleife
    print(x)                            # der sogenannte Körper der Schleife 

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.

  1. Ändere range(6) in range(4, 13).
  2. Ändere den Namen der Laufvariable x in zahl und gib in jedem Schleifendurchlauf das Quadrat von zahl aus.
  3. Bonus: Überlege dir, dass man jede for-Schleife auch als while-Schleife realisieren kann.

Einzelarbeit, ca. 10 Minuten

Verstehe das folgende Programm.

for i in range(5):
    print(i * " " + "H" + (5-i) * "all" + "o Ba" + i * "na")

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:

    X
   XXX
  XXXXX
 XXXXXXX
XXXXXXXXX
    X
    X

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:

Die Summe der Zahlen von 1 bis 10 ist 55.

Bonusaufgabe: (Bitte ausklappen!)

Bonusaufgabe: (Bitte ausklappen!)

Ändere dein Programm so, dass bei Eingabe 10 die Ausgabe wie folgt lautet (und analog für andere Eingaben):

Ich habe das Folgende berechnet:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

Hinweis:

Hinweis:

Baue den Ausgabestring schrittweise auf

Wenn du willst, kannst du auch die Summe der Quadrate berechnen, also beispielsweise

Ich habe das Folgende berechnet:
1 + 4 + 9 + 16 + 25 + 36 = 91

Einzelarbeit, ca. 5 Minuten

Es gibt in Python drei Arten der Divison in Python, nämlich /, // und %.

Verstehe diese, indem du mit dem folgenden Programm herumspielst; ändere etwa die Zahlen!

x = 23 / 5
y = 23 // 5
z = 23 % 5
print(x)
print(y)
print(z)

Hier ist die Lösung versteckt. Erst selbst denken!

Hier ist die Lösung versteckt. Erst selbst denken!

  • / ist die “normale” Division
  • // ganzzahlige Division: Wie oft passt die eine Zahl maximal in die andere hinein? (vergiss Nachkommastellen)
  • % liefert den Rest bei der ganzzahligen Division

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.

Die Teiler von 24 sind: 1, 2, 3, 4, 6, 8, 12, 24,

Hinweis (bitte aufklappen)

Hinweis (bitte aufklappen)

Hinweis (bitte aufklappen)

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.

Eine Zahl x ist genau dann ein Teiler von y, wenn y % x == 0 gilt

Bonusaufgabe: (Bitte ausklappen!)

Bonusaufgabe: (Bitte ausklappen!)

Gib zusätzlich aus, wie viele Teiler die Zahl hat.

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

MeinVorname.MeinNachname@ksbg.ch

(Meine Brühl-Adresse und Teams checke ich nicht so oft. Mein Name steht unten rechts auf dieser Seite.)

Erst selbst überlegen!

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.

Verwende while- oder if-Schleife zur Turtle-Steuerung.

Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag # als Kommentareinleitungszeichen am Zeilenanfang).

Link zur Fragebox

zu ergänzen

zu ergänzen

 

1)
Genaugenommen gibt es diese Struktur nur in unserem “Java-Dialekt” Jython von Python.
  • lehrkraefte/snr/informatik/bruehl-2022/schleifen-erster-versuch.txt
  • Last modified: 2022/03/25 10:12
  • by Olaf Schnürer