While- und For-Schleifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
D0mino
User
Beiträge: 7
Registriert: Sonntag 19. März 2006, 13:10

Sonntag 19. März 2006, 13:16

Hallo!
Ich hab folgende Frage zu While- und For-Schleifen: Warum muss die Variable (im Unterricht nennen wir sie a) im Verlauf der Schleife ihren Wert ändern? Erst sagt man ja a=0 am Anfang der Schleife und nach der Entscheidung in der Schleife muss man ja immer a=a+1 (oder etwas ähnliches) sagen. Warum eigentlich?
Weil a ist ja eigentlich auch nicht der eingegebene Wert, der hat bei uns immer ne andere Bezeichnung... :?:

Danke für die Hilfe!
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Sonntag 19. März 2006, 13:24

Der Wert einer Variable in einer while-Schleife muß den Wert nicht ändern. Mach mal:

Code: Alles auswählen

a = 1
while a <= 10:
    print "Ich bin jetzt in der Schleife:", a
und guck was passiert. Wahrscheinlich nicht das was Du denkst.

Code: Alles auswählen

a = 1
while a <= 10:
    print "Ich bin jetzt in der Schleife:", a
    a += 1
macht wahrscheinlich schon eher das was Du denkst.

Die while-Schleife in Python entspricht (ungefähr) dem was man in anderen Programmiersprachen als Zählschleife bezeichnet, auch dort muß man explizit angeben wenn irgendwas mit dem Namen aus der Bedingung passieren soll, so dass die Bedingung irgendwann mal den booleschen Zustand ändert.

Eine for-Schleife in Python ist eine Besonderheit, und zwar ist es keine Zählschleife, sondern eine Kurzschreibweise für eine Iterator-Schleife:

Code: Alles auswählen

for i in (1,2,3,4,5):
    print "Ich bin:", i
iteriert über die Elemente des Container (1,2,3,4,5), was zufällig ein Tupel ist, und über Tupel kann man iterieren. Folgendes geht nämlich zum Beispiel nicht:

Code: Alles auswählen

for i in 1:
    print "Geht nicht! Kommt Fehler vor mir. ;-)"
Über Integer kann man nicht iterieren. Eine Iteratorschleife hat keine explizite Abbruchbedingung wie man sieht (in der Zählschleife while ist es eben das a < 10), sondern die Iteration hört auf wenn es keine Elemente in dem Objekt mehr gibt über die man noch laufen muß. Du kannst in so einer Schleife die Variable die die Objekte aufnimmt über die iteriert wird beliebig ändern, da es eben im Gegensatz zur Bedeutung von a keine Bedeutung für die (implizite) Abbruchbedingung hat.

Hmm... So, ich hoffe das erklärt den Unterschied so ein bisschen... Für alles andere: les ein Buch über "Einführung in die Programmierung," Schleifen sind wahnsinnig wichtige Konzepte die man verstehen muß, damit man überhaupt anfangen kann zu programmieren...
--- Heiko.
D0mino
User
Beiträge: 7
Registriert: Sonntag 19. März 2006, 13:10

Sonntag 19. März 2006, 13:48

Hmmm aha, das ist ja alles ganz schön kompliziert, ich bin ja nur son kleiner schüler, der seit nem halben Jahr den Informatikkurs macht... :D
Aber vielen Dank, ich hab alle deine Beispiele ausprobiert, das ist interessant!
Guck mal hier, das haben wir mal im Unterricht gebastelt:

Code: Alles auswählen

#!/usr/bin/Python

anzahl=1
schluessel=322

print "Zugangscode (3-stellig) eingeben : ",

code=input()

while (code!=schluessel):
     print "FALSCHER ZUGANGSCODE"
     anzahl=anzahl+1
     if (code<schluessel):
          print "zu klein..."
     else:
          print "zu groß..."
     print "Dein",anzahl,". Versuch . ",
     code=input()

print "ZUGANG GEWAEHRT"
1. Frage: Hat das erste "code=input()" zwei Funktionen? 1. Dass man was eingeben kann und 2. dass das eingegebene gleichzeitig die variable "code" zugeschrieben wird?

2. Frage: Warum taucht in der Schleife plötzlich "anzahl=anzahl+1" auf? Die Variable Anzahl wurde doch noch gar nicht benutzt, hat also noch gar keinen Wert zugewiesen bekommen und deshalb kann der Wert doch auch nicht um 1 erhöht werden. Oder wie?

Der Rest ist klar :D

Tut mir leid, dass das für euch son Pullerkram ist, aber das Forum hier ist ein Hort des Wissens für mich! :wink:

Auf jeden Fall vielen Dank für die Hilfe!
Zuletzt geändert von D0mino am Sonntag 19. März 2006, 13:53, insgesamt 1-mal geändert.
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 19. März 2006, 13:50

Zu aller erst, schau dir mal das an: http://www.python-forum.de/faq.php#21

Zum Thema input(): http://wiki.python.de/Thema_Sicherheit#InputRawInput

EDIT:
Zur Frage 1: Ja ;)

Zur Frage 2: Oben wird doch anzahl = 1 gesetzt...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
D0mino
User
Beiträge: 7
Registriert: Sonntag 19. März 2006, 13:10

Sonntag 19. März 2006, 13:53

Oh ok, sry das wusste ich nicht...
D0mino
User
Beiträge: 7
Registriert: Sonntag 19. März 2006, 13:10

Sonntag 19. März 2006, 13:54

zu 2:
ach ja stimmt, tut mir leid das hab ich überlesen... danke für den link! :)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 19. März 2006, 15:39

jens hat geschrieben:Zu aller erst, schau dir mal das an: http://www.python-forum.de/faq.php#21
Hey, das habe ich auch noch nicht gesehen :)

Achja, was mir noch auffällt: normalerweise macht man in Python keine Klammern um Bedingungen:

So wird aus:

Code: Alles auswählen

while (code!=schluessel):
das hier:

Code: Alles auswählen

while code != schluessel:
Und ebenso wird das:

Code: Alles auswählen

if (code<schluessel):
zu dem hier:

Code: Alles auswählen

if code < schluessel:
Dann noch ein kleiner Trick:

Code: Alles auswählen

anzahl=anzahl+1
kann man auch so schreiben, als Erweiterte Zuweisung (für Details siehe [wiki]Neue_Features#ErweiterteZuweisung[/wiki])

Code: Alles auswählen

anzahl += 1
Zu guter letzt noch die letzte Anmerkung: du solltest Leerzeichen zwischen den Operatoren machen (das ist Konvention unter Python-Programmierern und wird in PEP 8 erklärt):

Code: Alles auswählen

schluessel=322
wird zu:

Code: Alles auswählen

schluessel = 322
Bei weiteren Fragen: einfach fragen! Wir helfen gerne.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten