lehrkraefte:blc:informatik:glf20:programmieren:while

This is an old revision of the document!


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.

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.

Kopieren, testen und verstehen Sie folgenden Code:

counter = 0
while counter < 10:
    print(counter)
    counter += 1

Die folgenden Codeblöcke führen zum gleichen Ergebnis:

counter += 1
counter = counter + 1

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.

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

//

(ganzzahlige Division) um herauszufinden, wie oft eine Note ausgegeben werden soll. Mit

%

(Modulo) können Sie dann den Rest berechnen, welcher dann mit einer tieferen Note ausgegeben wird.

Zufallszahl - Python kann selbständig eine Zufallszahl generieren

from random import *
x = randint(1, 100)
print x

Der oben aufgeführte Code gibt eine ganze Zahl zwischen 1 und 100 aus.

Schreiben Sie ein Programm, bei welchem der Benutzer eine zufällige Zahl zwischen 1 und 100 erraten muss.

Beispiel einer Ausgabe

Neue Zahl: 15
Zahl zu gross
Neue Zahl:

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.

Lösungvorschläge

Lösungvorschläge

#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
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!"
#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)
 
  • lehrkraefte/blc/informatik/glf20/programmieren/while.1604060339.txt.gz
  • Last modified: 2020/10/30 13:18
  • by mirco.triner