2017-06-26 7 views
4

Ich schreibe Fibonacci-Code in Python. Die folgende Lösung gehört mir.Variable Zuordnung Abfrage in Python

enter image description here

Während die andere unterhalb Lösung von python.org ist.

enter image description here

Kann mir jemand sagen, warum es eine andere Antwort, obwohl die Logik der Zuordnung der Variablen ergibt das gleiche ist?

+0

Es wäre am besten, wenn Sie Ihren Code als formatierten Text anstelle von Screenshots hinzugefügt hätten, damit er durchsuchbar und lesbar bleibt und Probleme in der Zukunft mit link rot vermieden werden. –

Antwort

7

Diese beiden Programme sind nicht gleichwertig. Die rechte Seite des Gleichen (=) wird alle zusammen ausgewertet. Doing:

a=b 
b=a+b 

unterscheidet sich von:

a,b = b,a+b 

Diese in Wirklichkeit ist die gleiche wie:

c = a 
a = b 
b = b + c 

Ihr Beispiel tatsächlich auf dem Python documentation bedeckt ist:

Die erste Zeile enthält eine mehrfache Zuweisung: Die Variablen a und b erhalten gleichzeitig die neuen Werte 0 und 1. In der letzten Zeile wird dies erneut verwendet, um zu demonstrieren, dass die Ausdrücke auf der rechten Seite alle zuerst ausgewertet werden, bevor irgendeine der Zuweisungen stattfindet. Die Ausdrücke auf der rechten Seite werden von links nach rechts ausgewertet.

2

Ich sehe zusätzliche Tabs in Ihrer Lösung und auch die Logik Ihres Programms ist falsch. Soweit ich das verstanden habe mit fib(5) wollen Sie 5. Fibonacci in der Serie (das ist 5) nicht eine Zahl, die weniger als 5 ist (was 3 ist).

a=b 
b=a+b 

und

a,b = b,a+b 

sind nicht gleich.

Schauen Sie sich den folgenden Code an.

def fibonacci(num): 
    a,b=0,1; 
    counter = 2; 
    while(a<=): 
     a,b = b,a+b 
     counter += 1 
    return b 

print fibonacci(5) 
5

Der Grund ist es im zweiten Beispiel arbeitet, ist becasue die a=b nicht auswertet, bis beide fertig sind. Wenn es also zum b=a+b Teil kommt, ist a immer noch der vorherige Wert. In Ihrem ersten Beispiel überschreiben Sie a, bevor Sie es verwenden. Wenn Sie in Python Variablen auf diese Weise deklarieren, verwenden Sie sie tatsächlich als Tupel. Dies bedeutet, dass sie bis zum Abschluss der gesamten Zeile ihre ursprünglichen Werte beibehalten. Sobald das Tupel entpackt ist, werden sie überschrieben.

7

Die Linien

a = b # Assigns the value of 'b' to 'a' 
b = a + b # Adds the new value of 'a' to 'b' 

während

a, b = b, a+b Ordnet den Wert b zu a. Fügt den vorhandenen Wert von a zu b hinzu.