Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Schleifen: while ====== 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 ändern. Ausserhalb, 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> Kopieren, testen und verstehen Sie folgenden Code: <code python> counter = 0 while counter < 10: print(counter) counter += 1 </code> </WRAP> <WRAP info> Die folgenden Codeblöcke führen zum gleichen Ergebnis: <code> counter += 1 </code> <code> counter = counter + 1 </code> </WRAP> <WRAP alert> Bei einer While-Schleife kann es leicht passieren, dass die Schleife endlos weiterläuft. Im Gegensatz zu einer For-Schleife muss die Variable bei einer While-Schleife manuell verändert werden. Speichern Sie deshalb Ihr Programm, bevor Sie es ausführen. </WRAP> <WRAP todo> Schreiben Sie nun ein Programm, welches 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. * TIPP: Benutzen Sie <code>//</code> (ganzzahlige Division) um 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. </WRAP> <WRAP info> Zufallszahl - Python kann selbständig eine Zufallszahl generieren <code> from random import * x = randint(1, 100) print x </code> Der oben aufgeführte Code gibt eine ganze Zahl zwischen 1 und 100 aus. </WRAP> <WRAP todo> Schreiben Sie ein Programm, bei welchem der Benutzer eine zufällige Zahl zwischen 1 und 100 erraten muss. Beispiel einer Ausgabe <code text> Neue Zahl: 15 Zahl zu gross Neue Zahl: </code> </WRAP> <WRAP todo> Nun drehen wir den Spiess um. Schreiben Sie ein Programm, welches eine zufällige Zahl zu finden versucht. Versuchen Sie einen möglichst effizienten Algorithmus zu finden. </WRAP> ===== Lösungsvorschläge ===== <hidden Lösungvorschläge> <code python> #Bankautomat print("Guten Tag") cash = inputInt("Welcher Betrag soll ausbezahlt werden?") while cash > 0: 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 </code> <code python> from random import * to_be_guessed = randint(1, 100) guess = 0 while guess != to_be_guessed: guess = input("Neue Zahl: ") if guess > 0: if guess > to_be_guessed: print "Zahl zu gross" elif guess < to_be_guessed: print "Zahl zu klein" else: print "Schade, Sie geben also auf!" break else: print "Glückwunsch! Das war's!" </code> <code python> #Zahl zwischen 1-100 to_be_guessed = input("Neue Zahl: ") guess = 50 counter = 1 while guess != to_be_guessed: if(guess > to_be_guessed): guess //= 2 else: if((to_be_guessed - guess) % 2 == 1): guess += 1 else: guess += ((to_be_guessed - guess) // 2) print("Round: %d, Guess %d" % (counter, guess)) counter += 1 print(to_be_guessed) </code> </hidden> lehrkraefte/blc/informatik/glf20/programmieren/while.txt Last modified: 2020/10/30 13:21by mirco.triner