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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:glf23:python:while-loops [2023/09/28 11:30] – [Bonus-Aufgabe/Challenge: Kehrwerte der Quadratzahlen summieren (gibt interessantes Ergebnis!)] Olaf Schnürerlehrkraefte:snr:informatik:glf23:python:while-loops [2023/09/28 14:35] (current) – [Aufgabe 4: Slalomtext] Olaf Schnürer
Line 1: Line 1:
 +~~NOTOC~~
 +
 +====== while-Loops bzw. while-Schleifen ======
 +
 +
 +===== Erklärungen =====
 +
 +<WRAP center round info>
 +<code python while-zaehlen.py>
 +print("Zählen per while-Schleife")
 +i = 1
 +while i <= 10:
 +    print(i)
 +    i = i + 1
 +</code>
 +</WRAP>
 +
 +==== Aufgabe 1: Zahlen ausgeben ====
 +
 +<WRAP center round todo>
 +Ö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).
 +</WRAP>
 +
 +==== Aufgabe 2: Quadratzahlen summieren ====
 +
 +<WRAP center round todo>
 +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
 +<code text>
 +Die Summe aller Quadratzahlen von 1 bis n = ... beträgt ....
 +</code>
 +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. 
 +</WRAP>
 +
 +==== Challenge: Bonus-Aufgabe 1: Überraschendes Ergebnis! ====
 +
 +<WRAP center round todo>
 +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}$.
 +</WRAP>
 +
 +==== Aufgabe 3: Teiler einer Zahl ====
 +
 +<WRAP center round todo>
 +(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.
 +</WRAP>
 +
 +
 +
 +==== Aufgabe 4: Slalomtext ====
 +
 +<WRAP center round todo>
 +Schreibe ein Python-Programm, das den folgenden "Slalomtext" ausgibt (sagen wir einhundert Zeilen davon).
 +<code text>
 +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!
 +...
 +</code>
 +
 +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.
 +
 +</WRAP>
 +
 +
 +
 +
 +==== Bonus-Aufgabe 2: Kopfrechentrainer mit mehreren Fragen ====
 +
 +<WRAP center round todo>
 +Im Abschnitt über if-statements hast du einen Kopfrechentrainer geschrieben, das den Benutzer nach dem Produkt zweier Zufallszahlen fragt (siehe [[lehrkraefte:snr:informatik:glf23:python:if-statements#aufgabe_2kopfrechentrainer|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.
 +
 +<hidden Hinweis: Hier ist ein Programm, das zwar etwas anderes tut, aber trotzdem hilfreich sein dürfte.>
 +<code python 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) + ".")
 +</code>
 +Man kann übrigens die "aktuelle" Schleife auch mit dem Befehl ''break'' verlassen. Das obige Programm kann man damit auch wie folgt schreiben:
 +<code python 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) + ".")
 +</code>
 +</hidden>
 +</WRAP>
 +
 +==== Bonus-Aufgabe 3: Primzahlen ausgeben ====
 +
 +<WRAP center round todo>
 +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.
 +</WRAP>
 +
 +
 +
 +
 +===== Link zur Kursseite =====
 +
 +[[lehrkraefte:snr:informatik:glf23|Zur Kursseite]]