lehrkraefte:snr:informatik:glf23:python:while-loops

while-Loops bzw. while-Schleifen

while-zaehlen.py
print("Zählen per while-Schleife")
i = 1
while i <= 10:
    print(i)
    i = i + 1

Öffne ein neues Python-Programm namens while-vielfache-von-drei.py. Kopiere das obige Zählprogramm und ändere es so, dass es alle durch 3 teilbaren Zahlen zwischen 0 und 99 ausgibt (sowohl 0 als auch 99 sollen ausgegeben werden).

Schreibe ein Programm, dass die Quadrate aller Zahlen von 1 bis zu einer am Anfang des Programms vereinbarten Zahl n, etwa n = 5,aufsummiert (d.h. es soll $1+4+9+\dots+n^2$ berechnet werden). Am Ende soll die Summe all dieser Quadratzahlen in der Form

Die Summe aller Quadratzahlen von 1 bis n = ... beträgt ....

ausgegeben werden, wobei die Punkte durch konkrete Zahlen zu ersetzen sind.

Hinweis: Verwende neben einer “Zählvariablen” i eine Variable summe, die du vor der while-Schleife auf Null setzt und innerhalb der while-Schleife jeweils um das Quadrat von i erhöhst.

Berechne mit Python die Summe $$s = 1 + \frac 14 + \frac19 + \frac1{16} + \dots + \frac1{1'000'000^2} = \frac 1{1^2}+ \frac 1{2^2} + \frac 1{3^2} + \frac 1{4^2} + \dots + \frac1{1'000'000^2}$$ der Kehrwerte der Quadrate aller natürlichen Zahlen von 1 bis 1'000'000.

Dann gib die Zahl $\sqrt{6 \cdot s}$ aus. Was fällt dir auf?

Hinweis: x**0.5 berechnet $x^{0.5}=x^{\frac 12}=\sqrt{x}$.

(Bitte möglichst nicht das in der zweiten Woche geschriebene Programm anschauen!)

Schreibe ein Programm, das vom Benutzer eine Zahl n einliest und alle Teiler von n ausgibt. Zusätzlich soll das Programm am Ende die Anzahl der Teiler von n ausgeben und mitteilen, ob n eine Primzahl ist oder nicht.

Hinweis: Verwende neben der “Zählvariablen” i, die alle Zahlen von 1 bis zur eingegebenen Zahl durchläuft, eine weitere Variable anzahl_teiler, die anfangs Null ist und genau dann um eins erhöht wird, wenn i ein Teiler von n ist.

Schreibe ein Python-Programm, das den folgenden “Slalomtext” ausgibt (sagen wir einhundert Zeilen davon).

Schleifen sind cool!
 Schleifen sind cool!
  Schleifen sind cool!
   Schleifen sind cool!
    Schleifen sind cool!
     Schleifen sind cool!
    Schleifen sind cool!
   Schleifen sind cool!
  Schleifen sind cool!
 Schleifen sind cool!
Schleifen sind cool!
 Schleifen sind cool!
  Schleifen sind cool!
   Schleifen sind cool!
...

Hinweise:

  • Verwende eine Zählvariable i, die in einer while-Schleife alle Werte von 0 bis hundert annimmt.
  • In der Schleife:
    • Speichere den Rest der Division von i durch 10 in einer Variablen r.
    • Beachte: Die Anzahl der Leerschläge vor dem Text hängt nur von r ab, da sich das Muster periodisch alle 10 Zeilen wiederholt.
    • Verwende eine if-Struktur:
      • Wenn r kleiner-gleich vier ist: Gib $r$ Leerschläge aus, gefolgt vom Text “Schleifen sind cool.”.
      • Sonst: Gib $(10 - r)$ Leerschläge aus, gefolgt vom Text “Schleifen sind cool.”.

Bemerkung: Falls du den Programmablauf verlangsamen möchtest:

  • Ergänze die Zeile import time ganz am Anfang deines Programms. Damit werden die Befehle aus der Bibliothek time verwendbar.
  • Am Ende der while-Schleife ergänze die Zeile time.sleep(0.1). Der Computer pausiert dann 0.1 Sekunden.

Im Abschnitt über if-statements hast du einen Kopfrechentrainer geschrieben, das den Benutzer nach dem Produkt zweier Zufallszahlen fragt (siehe Aufgabe Kopfrechentrainer).

Erweitere dieses Programm nun so, dass dem Benutzer so lange Multiplikationsaufgaben gestellt werden, bis der Benutzer “q” wie quit eingibt.

Dem Benutzer soll am Ende mitgeteilt werden, wie viel Prozent der Aufgaben er richtig beantwortet hat.

Hinweis: Hier ist ein Programm, das zwar etwas anderes tut, aber trotzdem hilfreich sein dürfte.

Hinweis: Hier ist ein Programm, das zwar etwas anderes tut, aber trotzdem hilfreich sein dürfte.

eingaben-aufsummieren.py
print("Summieren von Eingaben")
summe = 0
eingabe = ""
while eingabe != "q":
    eingabe = input("Gib eine Zahl oder q (wie quit) ein: ")
    if eingabe != "q":
        summe = summe + int(eingabe)
print("Die Summe der eingegebenen Zahlen ist " + str(summe) + ".")

Man kann übrigens die “aktuelle” Schleife auch mit dem Befehl break verlassen. Das obige Programm kann man damit auch wie folgt schreiben:

eingaben-aufsummieren-mit-break.py
print("Summieren von Eingaben")
summe = 0
eingabe = ""
while True:
    eingabe = input("Gib eine Zahl oder q (wie quit) ein: ")
    if eingabe == "q":
        break
    summe = summe + int(eingabe)
print("Die Summe der eingegebenen Zahlen ist " + str(summe) + ".")

Schreibe ein Programm, dass alle Primzahlen bis n = 1000 ausgibt.

Hinweis: Gehe alle Zahlen von 1 bis n nacheinander durch und teste jeweils, ob es sich um eine Primzahl handelt. Dafür kannst du einige Code-Zeilen aus dem zuvor geschriebenen “Teiler-Programm” verwenden.

Bemerkung: Schneller geht die Erzeugung einer Primzahlliste etwa mit dem Sieb des Eratosthenes. Dazu benötigt man aber Listen, wie wir sie bald kennenlernen werden.

  • lehrkraefte/snr/informatik/glf23/python/while-loops.txt
  • Last modified: 2023/09/28 16:35
  • by Olaf Schnürer