@w2002w

Как происходит присваивание Python?

Почему
x1, x2 = x2, x1+x2
и
x1=x2
x2+=x1

выдают разный аутпут?

весь код(Вывод чисел Фибоначчи):
# put your python code here
x1 = x2 = 1
n = int(input())

if n ==1:
    print(1)
elif n ==2:
    print(1,1)
else:
    print(1,1,end=' ')
    for j in range(2,n):
        x1, x2 = x2, x1+x2
        print(x2, end=' ')
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
@dmshar
Все очень просто. Рассмотрим ПОСЛЕДОВАТЕЛЬНОСТЬ выполенния:

x1=3
x2=5
x1=x2
x2+=x1

Вначале имеем x1=3, x2=5.
После выполнения первого оператора получаем x1=5, x2=5.
После выполнения второго оператора получаем x1=5, x2=10.

При выполнении
x1=3
x2=5
x1, x2 = x2, x1+x2

Вначале имеем x1=3, x2=5.
Потом выполняем то, что вы написали последовательно,
x1=x2, Но до завершении этой операции результат операции сохраняется во временной переменной.
Поэтому при выполнении x2=x1+x2 в процессе используются начальные значения переменных. Результат, кстати, тоже заноситься во временную переменную.
И только при завершении всего оператора результаты из временных переменных записываются по назначению.
В итоге имеем
x1=5, x2=8

Попробуйте сравнить
x1, x2, x3 = x2, x1+x2, x1+x2+x3
и
x1=x2
x2=x1+x2
x3=x1+x2+x3

Станет понятнее.
На самом деле результат ЛЮБОГО оператора всегда сначала заноситься во временную переменную и только в момент завершения всего оператора переноситься по назначению. Но в одном случае это не влияет на результат, а в другом случае - влияет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zexer
Почему они выдают разный результат? У меня все ок.
x1 = x2 = 5
x1, x2 = x2, x1+x2
print(x1, x2)

x1 = x2 = 5
x1 = x2
x2 += x1

print(x1, x2)
5 10
5 10
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы