2016-01-25 10 views
-5

Я изо всех сил пытаюсь понять, что на самом деле делает эта функция в python?Что делает эта функция с a, b = b, a + b?

def mystery(n): 
    a, b = 0, 1 
    while a < n: 
     print(a) 
     a, b = b, a + b 

Хотя основной я не совсем понимаю, чего он достиг? При добавлении основной команды, чтобы запустить его с буквой N, такие как-

def mystery(n): 
    a, b = 0, 1 
    while a < n: 
     print(a) 
     a, b = b, a + b 

n = int(input("Input the letter N")) 
mystery(n) 

Он придумывает странные выходы, такие как-

Input the letter N 20 
0 
1 
1 
2 
3 
5 
8 
13 

Пожалуйста, помогите мне понять этот код,

Thanks, Isaac.

+0

Вы должны включить образец ввод и вывод в сообщении. Вы можете [редактировать] и включать эту информацию. – Arc676

+1

Это цифры 'фибоначчи 'до достижения' n' – Arman

+0

Я мог бы ожидать слишком многого, поскольку я ничего не знаю о ваших способностях в кодировании или математике, но если вы просто выпишите таблицу с 'a' и' b', тогда запустите код вручную для любого значения 'n', вы быстро увидите, что это последовательность Фибоначчи. – Arc676

ответ

1

Резюмируя:

функция распечатывает первых N чисел в последовательности Фибоначчи.

Это последовательность, начинающаяся с 1, 1, и каждый следующий термин представляет собой сумму двух предыдущих терминов.

a, b = b, a + b 

Здесь у вас есть 2 переменных. a всегда является текущим сроком, а b - следующий термин. Каждая итерация после печати текущего термина назначает следующий термин a и вычисляет после этого термин.

a: current term 
b: the next term 
a+b: the term after that 

Подробнее об обмене переменных с помощью этого метода вы можете узнать on this SO post.

Из принятого ответа на @eyquem:

Python вычисляет выражения слева направо. Обратите внимание, что при оценке присваивания правая часть оценивается перед левой стороной.

Documentation: Expressions § Evaluation Order

+0

Вы только что сделали чье-то домашнее задание;) – geotheory

+0

@geotheory Правда, но а) это хорошая практика для меня, чтобы объяснить вещи, чтобы убедиться, что я их понимаю, и б) кажется, что вопрос был разрешен в комментариях в любом случае, что не поощряется текстом всплывающей подсказки кнопки «добавить комментарий».Ответ, похоже, является конечным шагом в цикле, который является Q & A, поэтому, поскольку вопрос был задан, в конечном итоге будет дан ответ: – Arc676

+1

Я принимаю некоторые логические соображения, за исключением того, что у нас теперь есть «Python» Mystery «Code», засоряющий пространство имен SO для поиска google. – geotheory

Смежные вопросы