~~NOTOC~~ ====== while-Loops bzw. while-Schleifen ====== ===== Erklärungen ===== print("Zählen per while-Schleife") i = 1 while i <= 10: print(i) i = i + 1 ==== Aufgabe 1: Zahlen ausgeben ==== Ö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). ==== Aufgabe 2: Quadratzahlen summieren ==== 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. ==== Challenge: Bonus-Aufgabe 1: Überraschendes Ergebnis! ==== 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}$. ==== Aufgabe 3: Teiler einer Zahl ==== (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. ==== Aufgabe 4: Slalomtext ==== 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. ==== Bonus-Aufgabe 2: Kopfrechentrainer mit mehreren Fragen ==== 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. 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: 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) + ".") ==== Bonus-Aufgabe 3: Primzahlen ausgeben ==== 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. ===== Link zur Kursseite ===== [[lehrkraefte:snr:informatik:glf23|Zur Kursseite]]