Newbie: Frage zur Fibonacci-Folge aus dem Tutorial

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
MuMPiTz
User
Beiträge: 27
Registriert: Freitag 27. Juli 2018, 15:07

Aus dem Tutorial
>>> # Fibonacci-Folge:
... # Die Summe der letzten beiden Elemente ergibt das nächste
... a, b = 0, 1
>>> while b < 10:
... print(b)
... a, b = b, a+b
...
1
1
2
3
5
8
Mich verwirrt das ein wenig:

Zuerst ist a = 0 und b = 1, er gibt also zuallererst 1 aus. Nach der Ausgabe verändern sich die Variablen, entsprechend des Codes:
a, b = b, a+b
Das müsste doch bedeuten:
a = b, also a = 1
UND
b = a + b = 1 + 1 = 2

Demnach sollte er doch bei der nächsten (der zweiten) Schleife, b entsprechend "2" ausgeben. Er gibt aber wieder eine "1" aus. Wieso tut er das?





Wenn ich das ganze leicht anders schreiben würde, nämlich so:
a = 0
b = 1
while b < 10:
print(b)
a = b
b = a + b
Würde er die Zahlen auch nach meiner Logik ausgeben, also:
1
2
...




Ich frage mich nun, was der Unterschied ist. Ich dachte eigentlich

a, b = 0, 1

wäre wie im Tutorial erklärt, einfach eine Mehrfachzuweisung, also quasi das Selbe wie:
a = 0
b= 1

aber anscheinend ist dem nicht so. Kann mir jemand meinen Denkfehler erklären?
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

MuMPiTz hat geschrieben: Montag 6. August 2018, 14:22 Das müsste doch bedeuten:
a = b, also a = 1
UND
b = a + b = 1 + 1 = 2
Hi,
nein, es wird erst die rechte Seite komplett berechnet und dann der linken Seite zugewiesen.
a, b = b, a+b ist beim ersten Durchlauf a, b = 1, 0+1

Nur dadurch kann man z.B. auch mit a, b = b, a einen Wertetausch vornehmen, ohne eine dritte Variable zu benötigen.

Schaue mal hier: https://docs.python.org/3/reference/exp ... tion-order
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
MuMPiTz
User
Beiträge: 27
Registriert: Freitag 27. Juli 2018, 15:07

ThomasL hat geschrieben: Montag 6. August 2018, 14:32
MuMPiTz hat geschrieben: Montag 6. August 2018, 14:22 Das müsste doch bedeuten:
a = b, also a = 1
UND
b = a + b = 1 + 1 = 2
Hi,
nein, es wird erst die rechte Seite komplett berechnet und dann der linken Seite zugewiesen.
a, b = b, a+b ist beim ersten Durchlauf a, b = 1, 0+1

Nur dadurch kann man z.B. auch mit a, b = b, a einen Wertetausch vornehmen, ohne eine dritte Variable zu benötigen.

Schaue mal hier: https://docs.python.org/3/reference/exp ... tion-order
Verstehe, vielen Dank!
Antworten