lehrkraefte:blc:informatik:glf20:programmieren:while

Differences

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

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:while [2020/10/28 06:51]
mirco.triner created
lehrkraefte:blc:informatik:glf20:programmieren:while [2020/10/30 13:21] (current)
mirco.triner
Line 1: Line 1:
 ====== Schleifen: while ====== ====== Schleifen: while ======
  
-Programme sollen auf unterschiedliche Eingaben oder Zustände unterschiedliche reagieren könnenDies wird mit ''if'' und Konsorten erreicht.+Schleifen, werden benötigt, um einen Codeblock, den man auch als Schleifenkörper bezeichnet, wiederholt auszuführen. In Python gibt es zwei Schleifentypen: die while-Schleife und die for-Schleife.  
 + 
 +<WRAP info> 
 +Die meisten Schleifen enthalten einen Zähler oder ganz allgemein Variablen, die im Verlauf der Berechnungen innerhalb des Schleifenkörpers ihre Werte ändernAusserhalb, d.h. noch vor dem Beginn der Schleife, werden diese Variablen initialisiert.  
 +  * Zähler werden ausserhalb der Schleife initialisiert. 
 +Vor jedem Schleifendurchlauf wird geprüft, ob ein Ausdruck, in dem diese Variable oder Variablen vorkommen, wahr ist. Dieser Ausdruck bestimmt das Endekriterium der Schleife. Solange die Berechnung dieses Ausdrucks "True" liefert wird der Rumpf der Schleife ausgeführt. Nachdem alle Anweisungen des Schleifenkörpers durchgeführt worden sind, springt die Programmsteuerung automatisch zum Anfang der Schleife, also zur Prüfung des Endekriteriums zurück und prüft wieder, ob diese nochmals erfüllt ist. 
 +Wenn ja, geht es wie oben beschrieben weiter, ansonsten wird der Schleifenkörper nicht mehr ausgeführt und es wird mit dem Rest des Skriptes fortgefahren. Das nebenstehende Diagramm zeigt dies schematisch. 
 +  * Solange das Kriterium erfüllt ist (TRUE) wird der Code innerhalb der Schleife ausgeführt. 
 +</WRAP>
  
 <WRAP todo> <WRAP todo>
 Kopieren, testen und verstehen Sie folgenden Code: Kopieren, testen und verstehen Sie folgenden Code:
 <code python> <code python>
-# Ganze Zahl einlesen +counter 0 
-zahl inputInt("Bitte eine Ganzzahl:") +while counter < 10: 
- +    print(counter
-# Der Abstand um das '>'-Zeichen ist optional +    counter += 1
-# Der Doppelpunkt am Ende der if-Zeile muss stehen +
-# Danach wird der Code eingerückt. +
-if zahl > 10: +
-  print("Ihre Zahl ist grösser als 10"+
-  print("Wird nur ausgegeben, wenn die Zahl grösser als 10 ist..."+
-print("Das wird immer ausgegeben, weil nicht mehr eingerückt und damit nicht mehr im 'if' drin.")+
 </code> </code>
 </WRAP> </WRAP>
  
 <WRAP info> <WRAP info>
-Nach ''if'' folgt eine **Bedingung**, die ''True'' oder ''False'' ergibt. Bedingungen sind meist Vergleiche+Die folgenden Codeblöcke führen zum gleichen Ergebnis
-  * ''=='': Gleichheit. //Achtung: Das einfache ''='' ist eine Zuweisung und sollte im ''if'' nicht verwendet werden.// +<code> 
-  * ''!=''  Ungleichheit. +counter +1 
-  * ''<nowiki><</nowiki>'', ''<nowiki><=</nowiki>'', ''>='', ''>'': Kleiner, kleiner gleich, grösser gleich, grösser. +</code> 
-Bedingungen können negiert und verknüpft werden: +<code> 
-  * ''not'': Negation. Z.B. ist ''if a!=b:'' das Gleiche wie ''if not (a==b):'' +counter counter + 1 
-  * ''and'': Logisch und. Ergibt genau dann ''True''wenn beide Bedingungen ''True'' sindZ.B. ''if a==b and b==c:'' +</code> 
-  * ''or'': Logisch oder. Ergibt genau dann ''True''wenn eine der beiden oder beide Bedingungen wahr sindZ.B. ''if a==b or b==c:''+</WRAP
 + 
 +<WRAP alert> 
 +Bei einer While-Schleife kann es leicht passierendass die Schleife endlos weiterläuftIm Gegensatz zu einer For-Schleife muss die Variable bei einer While-Schleife manuell verändert werdenSpeichern Sie deshalb Ihr Programmbevor Sie es ausführen.
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
-True oder False? Bei den letzen beiden Aufgaben **nicht rechnen**sondern überlegen! +Schreiben Sie nun ein Programmwelches einen Bankautomat simuliert. Der Bankautomat versucht die Anzahl von Noten möglichst gering zu halten. Möchte der Kunde 250.-dann wird der Automat 1x 200.- und 1x 50.- ausgeben. 
-<quizlib id="quiz" rightanswers="[['a1']['a0'], ['a1'], ['a1'], ['a0']]" submit="Check Answers"> + 
-    <question title="&lt;pre&gt;2>3&lt;/pre&gt;" type="radio">True|False</question> +*  TIPP: Benutzen Sie <code>//</code> (ganzzahlige Divisionum herauszufinden, wie oft eine Note ausgegeben werden soll. Mit <code>%</code(Modulo) können Sie dann den Rest berechnen, welcher dann mit einer tieferen Note ausgegeben wird.
-    <question title="&lt;pre&gt;7>9 or 9>7&lt;/pre&gt;" type="radio">True|False</question> +
-    <question title="&lt;pre&gt;not(True and (False or True))&lt;/pre&gt;" type="radio">True|False</question> +
-    <question title="&lt;pre&gt;234*345&lt;321*251 and False&lt;/pre&gt;" type="radio">True|False</question> +
-    <question title="&lt;pre&gt;1234*4321&lt;2468*2160 or True&lt;/pre&gt;" type="radio">True|False</question> +
-</quizlib>+
 </WRAP> </WRAP>
  
 <WRAP info> <WRAP info>
-Mit ''else'' kann ein Code-Block begonnen werden, der ausgeführt wird, wenn das vorhergehende Code-Block im ''if'' nicht ausgeführt wurde.  +Zufallszahl - Python kann selbständig eine Zufallszahl generieren 
-<code python+<code> 
-+from random import * 
-if a<3: +randint(1100
-  print("a ist kleiner als 3") +print x
-else: +
-  print("a ist nicht kleiner als 3"  +
-</code> +
-Es ist auch möglichmit ''elif'' noch weitere Bedingungen zu testen und ein ''else'' am Schluss anzufügen, das ausgeführt wird, wenn alle vorhergehenden Bedingungen falsch waren. +
-<code python> +
-name = "Python" +
-if name=="Python": +
-  print("Hallo Schlange!"+
-elif name=="Monty": +
-  print("Da fehlt doch Python!"+
-else: +
-  print("No comment")+
 </code> </code>
 +Der oben aufgeführte Code gibt eine ganze Zahl zwischen 1 und 100 aus.
 </WRAP> </WRAP>
- 
  
 <WRAP todo> <WRAP todo>
-Schreiben Sie ein Programm, das eine Aussentemperatur einliest und dann die Temperatur in Worten ausgibt, z.B. "kalt", "warm", "heiss" oder mehr Abstufungen.+Schreiben Sie ein Programm, bei welchem der Benutzer eine zufällige Zahl zwischen 1 und 100 erraten muss.
  
 Beispiel einer Ausgabe Beispiel einer Ausgabe
 <code text> <code text>
--8°C ist kalt.+Neue Zahl: 15 
 +Zahl zu gross 
 +Neue Zahl:
 </code> </code>
 </WRAP> </WRAP>
Line 74: Line 64:
  
 <WRAP todo> <WRAP todo>
-Schreiben die ein Programm, das die allgemeine lineare Gleichung $ax + b = 0$ löstDas Programm soll die Koeffizienten $a$ und $b$ einlesen und die Lösung ausgeben. Behandeln Sie auch den Spezialfall, wenn $a=0$ ist.+Nun drehen wir den Spiess um. Schreiben Sie ein Programm, welches eine zufällige Zahl zu finden versuchtVersuchen Sie einen möglichst effizienten Algorithmus zu finden.
 </WRAP> </WRAP>
  
-<hidden Aufgabe, wenn die Lösung der quadratischen Gleichung schon behandelt wurde> 
-<WRAP todo> 
-Schreiben Sie ein Programm, das die quadratische Gleichung $ax^2+bx+c=0$ löst. Die Koeffizienten $a$, $b$ und $c$ sollen am Anfang direkt im Programmcode definiert werden. 
  
-Unterscheiden Sie dazu die unterschiedlichen Fälle, die auftreten können und melden Sie die Anzahl der Lösungen und die Lösungen selbst. +===== Lösungsvorschläge ===== 
- +<hidden Lösungvorschläge>
-Starten Sie Ihr Programm wie folgt:+
 <code python> <code python>
-Definition der Koeffizienten in einer Zeile, durch Kommas getrennt. +#Bankautomat
-a,b,c = 4,2,-3 +
-print("Gleichung %.2fx^2%+.2fx%+.2f = 0" % (a,b,c))  # %+f fügt auf jeden Fall ein Vorzeichen hinzu (+ oder -). +
-</code> +
-Beispiel-Ausgaben: +
-<code text> +
-Gleichung 4.00x^2+2.00x-3.00 = 0 +
-Zwei Lösungen x1=-1.151388 und x2=0.651388+
  
-Gleichung 1.00x^2+2.00x+1.00 = 0 +print("Guten Tag") 
-Genau eine Lösung x=-1.000000+cash inputInt("Welcher Betrag soll ausbezahlt werden?")
  
-Gleichung 1.00x^2+2.00x+3.00 = 0 +while cash > 0: 
-Keine reelle Lösung+    if cash//1000 > 0: 
 +        print("%d x 1000.-" % (cash//1000)) 
 +        cash = cash%1000 
 +    elif cash//200 > 0: 
 +        print("%d x 200.-" % (cash//200)) 
 +        cash = cash%200 
 +    elif cash//100 > 0: 
 +        print("%d x 100.-" % (cash//100)) 
 +        cash cash%100 
 +    elif cash//50 > 0: 
 +        print("%d x 50.-" % (cash//50)) 
 +        cash = cash%50 
 +    elif cash//20 > 0: 
 +        print("%d x 20.-" % (cash//20)) 
 +        cash = cash%20 
 +    elif cash//10 > 0: 
 +        print("%d x 10.-" % (cash//10)) 
 +        cash = cash%10 
 +    else: 
 +        print("und noch ein wenig Münz"
 +        cash = 0
  
-Gleichung 0.00x^2+1.00x+2.00 = 0 
-Lineare Gleichung, eine Lösung: x=-2.000000 
- 
-Gleichung 0.00x^2+0.00x+1.00 = 0 
-Falsche Aussage, keine Lösung 
- 
-Gleichung 0.00x^2+0.00x+0.00 = 0 
-Wahre Aussage, L=R, jedes x ist Lösung 
 </code> </code>
-</WRAP> 
-</hidden> 
  
-<WRAP info> 
-Der **Modulo-Operator** ''%'' haben wir bereits bei Strings für die formatierte Ausgabe angetroffen. 
- 
-Werden Zahlen mit ''%'' verknüpft, erhält man den Rest der Division. Z.B. 
-  * ''12 % 5'' ergibt 2 (weil der Rest 2 bei der Division von 10 durch 5 bleibt). 
-  * ''14 % 2'' ergibt 0 (weil die Division von 14 durch 2 aufgeht). 
-  * ''if a % 7 == 0:''  Überprüft, ob a durch 7 teilbar ist (d.h. den Rest 0 ergibt). 
-</WRAP> 
- 
-<WRAP todo> 
-**FIZZ BUZZ!** Programmieren Sie ein Programm, das alle Zahlen von 1 bis 100 ausgibt, aber alle jene, die durch 3 teilbar sind durch ''fizz'' ersetzt, jene, die durch 5 teilbar sind durch ''buzz'' ersetzt und jene, die sowohl durch 3 als auch durch 5 teilbar sind durch ''fizz buzz'' ersetzt. 
-<hidden Verlangte Ausgabe bis 30> 
-<code text> 
-1 
-2 
-fizz 
-4 
-buzz 
-fizz 
-7 
-8 
-fizz 
-buzz 
-11 
-fizz 
-13 
-14 
-fizz buzz 
-16 
-17 
-fizz 
-19 
-buzz 
-fizz 
-22 
-23 
-fizz 
-buzz 
-26 
-fizz 
-28 
-29 
-fizz buzz 
-</code> 
-</hidden> 
-</WRAP> 
- 
-===== Optionale, weitere Aufgaben ===== 
-  * Geben Sie alle Teiler einer Zahl aus. 
-  * Geben Sie die Primfaktorzerlegung einer Zahl aus. 
-  * Bestimmen Sie, ob eine gegebene Zahl eine Primazahl ist oder nicht. 
-  * Geben Sie die Primzahlen der Reihe nach aufsteigend aus. 
- 
-===== Lösungsvorschläge ===== 
-<hidden Lösungvorschläge> 
 <code python> <code python>
-for i in range(1,101): +from random import * 
-    if i % 3 == 0  and  i % 5 == 0+to_be_guessed = randint(1, 100
-        print("fizz buzz") +guess = 0 
-    elif i % 3 == 0: +while guess !to_be_guessed
-        print("fizz") +    guess = input("Neue Zahl: ") 
-    elif i % 5 == 0+    if guess > 0: 
-        print("buzz")+        if guess > to_be_guessed: 
 +            print "Zahl zu gross
 +        elif guess < to_be_guessed
 +            print "Zahl zu klein"
     else:     else:
-        print(i) +        print "Schade, Sie geben also auf!
-</code> +        break
- +
-<code python> +
-t = inputInt("Temperatur in Grad Celsius") +
-text  =  "%d°C ist " % t +
-if (t<15):     +
-    text += "kalt"   # eine Abkürzung für text = text + "kalt" +
-elif t<25: +
-    text += "warm"+
 else: else:
-    text += "heiss" +    print "Glückwunsch! Das war's!"
- +
-print(text+".")+
 </code> </code>
  
 <code python> <code python>
-Definition der Koeffizienten +#Zahl zwischen 1-100 
-a,b,c 0,0,0 +to_be_guessed input("Neue Zahl: ") 
-print("Gleichung %.2fx^2%+.2fx%+.2f = 0% (a,b,c))+guess = 50 
 +counter = 1
  
-if a==0 # Lineare Gleichung +while guess !to_be_guessed
-    if b==0 # Gleichung ohne x +    if(guess > to_be_guessed)
-        if c==0: +        guess //2
-            print("Wahre Aussage, L=R, jedes x ist Lösung"+
-        else: +
-            print("Falsche Aussage, keine Lösung")+
     else:     else:
-        print("Lineare Gleichung, eine Lösung: x=%f" % (-c/b)+        if((to_be_guessed guess% 2 == 1): 
-else: # Quadratische Gleichung +            guess +1 
-    d b*b-4*a*c  # Diskriminante +        else: 
-    if (d<0): +            guess += ((to_be_guessed guess) /2) 
-        print("Keine reelle Lösung"+    print("Round: %d, Guess %d" % (counterguess)) 
-    elif d==0: +    counter += 1 
-        print("Genau eine Lösung x=%f" % (-b/(2*a))) + 
-    else: +print(to_be_guessed) 
-        d = d**0.5 # Wurzel aus der Diskriminante +   
-        x1 = (-b-d)/(2*a) +
-        x2 = (-b+d)/(2*a+
-        print("Zwei Lösungen x1=%f und x2=%f" % (x1x2))+
 </code> </code>
 </hidden> </hidden>
  • lehrkraefte/blc/informatik/glf20/programmieren/while.1603864293.txt.gz
  • Last modified: 2020/10/28 06:51
  • by mirco.triner