Piszę kod fibonacci w Pythonie. Poniższe rozwiązanie jest moje.

enter image description here

Podczas gdy inne poniżej rozwiązanie pochodzi z Python.org.

enter image description here

Czy ktoś może mi powiedzieć, dlaczego daje inną odpowiedź, mimo że logika przypisania zmiennych jest taka sama?

4
Ryusei Nakamura 26 czerwiec 2017, 21:11

4 odpowiedzi

Najlepsza odpowiedź

Te dwa programy nie są równoważne. Prawa strona równa się ({x0}}) jest oceniana razem. Robić:

a=b
b=a+b

Jest inny od:

a,b = b,a+b

To jest w rzeczywistości taka sama jak:

c = a
a = b
b = b + c

Twój przykład jest faktycznie pokryty Dokumentacja Pythona :

Pierwsza linia zawiera wiele zadań: zmienne A i B jednocześnie otrzymują nowe wartości 0 i 1. W ostatniej linii jest używana ponownie, wykazując, że wyrażenia po prawej stronie są najpierw oceniane przed każdym z zadań odbywać się. Wyrażenia po prawej stronie są oceniane od lewej do prawej.

7
João Almeida 26 czerwiec 2017, 18:23

Widzę dodatkowe karty w twoim rozwiązaniu, a także logika twojego programu jest błędna. O ile zrozumiałem, pisząc fib(5), chcesz, aby 5 fibonacci w serii (co ma 5) nie jest liczbą mniejszą niż 5 (która jest 3).

a=b
b=a+b

I

a,b = b,a+b

Nie są równe.

Spójrz na poniższy kod.

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

print fibonacci(5)
2
Chandan Purbia 26 czerwiec 2017, 18:27

Powodem, dla którego działa w drugim przykładzie, ponieważ nie ocenia się a=b nie ocenia, dopóki nie będą gotowe. Więc kiedy dotrze do części b=a+b a jest nadal jego poprzedniej wartością. W pierwszym przykładzie nadpisujesz a przed użyciem. W pythonie, gdy deklarujesz zmienne w ten sposób, używasz ich jako Ktoczeń. Oznacza to, że aż do zakończenia całej linii zachowują swoje pierwotne wartości. Po rozpakowaniu krotki są nadpisane.

5
Buzz 26 czerwiec 2017, 18:32

Linie

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

Natomiast,

a, b = b, a+b przypisuje wartość b do a. Dodaje wartość istniejące a do b.

7
Ninjakannon 26 czerwiec 2017, 19:38