Frage zu While-Schleife.

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
Nakkiel
User
Beiträge: 7
Registriert: Sonntag 2. November 2008, 21:44

Hi,

es tut mir wirklich leid, dass ich hier so eine dumme Frage stellen muss, die sich sicher von alleine beantworten sollte, aber ich stehe einfach jetzt seit Stunden auf dem Schlauch und versteh es einfach nicht.

Versuche grade mir Python über Tutorials beizubringen und komme mit der While-Schleife nicht so wirklich klar.

Ich möchte, dass das Programm von einem bestimmten Wert runterzählt, bis ein anderer erreicht ist, und von da aus etwas anderes macht.
Das ganze dachte ich, sollte so funktionieren:

Code: Alles auswählen

>>>x=20, y=1
>>> def blah(x, y):
	while x>=5:
		x-y
		print x
	if x<5:
		x+20
		
Da es nicht funktioniert, ist mir natürlich auch klar, dass es falsch ist.
Nur weiß ich nicht wieso. Hatte while-Schleifen so verstanden, dass:
While bedingung=true:
[stuff der passieren soll]
if bedingung=false:
[anderer stuff passiert]

Des weiteren sorry dafür, dass ich vielleicht dumm formuliere, fange halt gerade erst an und selbst beibringen hat so seine Tücken=)

Liegt mein Fehler jetzt im Verständnis der while-Schleife oder darin, dass ich noch nicht ganz verstehe, wie man das in Code umsetzt?

Danke im Vorraus für jegliche Hilfe:)
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Code: Alles auswählen

>>> def bla(x, y):
...     while x >= 5:
...         x -= y
...     else:
...         x += 20
...     return x, y
... 
>>> print bla(20, 1)
(24, 1)
Wäre dein Code in "richtig".

Du hast while schon richtig verstanden, aber du speicherst die Werte nicht. Du operierst immer auf x = 20, denn x-y schmeißt du direkt nach dem Ausrechnen weg. mit -=, +=, *= etc kannst du bestimmte Aktionen gleich auf die Variable anwenden. Deine If Abfrage hätte zwar auch funktioniert, aber while Schleifen haben "else" Clauses, die ausgeführt werden, sobald die Schleife *normal* verlassen wurde (also ohne Anwendung des "break" Statements).
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Die Operatoren +,-,/ und * verändern ein Objekt i.d.R. nicht, insbesondere str, int und tuple sind immutable also unveränderbar.
Dass heisst du musst dem Namen mit dem Zuweisungsoperator('=') ein neues Objekt(das welches die Operation ergeben hat) zuweisen. Das sieht dann so aus:

Code: Alles auswählen

a = 1
a = a + 1
Desweiteren gibt es die Operatoren +=, -=, /= und *= welche nur noch syntaktischer Zucker für spam = spam +,-,/,* eggs
Nakkiel
User
Beiträge: 7
Registriert: Sonntag 2. November 2008, 21:44

Vielen dank, das hilft enorm und erklärt eigentlich vieles, was bisher nicht so wollte wie ich:)

und wo setze ich nun noch geschickt print Anweisungen, wenn ich möchte, dass es jede durchgeführte Rechenoperation zeigt?
In dem Fall hätte ich dann wirklich auch mal das Gefühl etwas gemacht zu haben, was irgendwas tut und nicht wie bei den bisherigen Sachen nur Taschenrechnerkram=)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

a = 1
a += 1
print(a)
Nakkiel
User
Beiträge: 7
Registriert: Sonntag 2. November 2008, 21:44

Tausend dank:)
BlackJack

Das sollte man besser so schreiben, dass nicht der Verdacht aufkommt die ``print``-Anweisung sei eine Funktion:

Code: Alles auswählen

print a
Zur Funktion wird ``print`` erst in Python 3.0.
Antworten