2016-02-22 2 views
0

Я изучаю программирование на питоне, и я столкнулся с немного беспорядка. Я нашел этот код для вычисления последовательности Фибоначчи пользователем, введенным начальным и конечным числом. Может кто-нибудь объяснить, как работает этот код?Fibonacci in python - Может ли кто-нибудь объяснить, как это число Фибоначчи между диапазоном работает?

def fib(lowerbound, upperbound): 
    x = 0 
    y = 1 
    while x <= upperbound: 
     if (x >= lowerbound): 
      yield x 
     x, y = y, x + y 

startNumber = 10 
endNumber = 100 
for fib_sequence in fib(startNumber, endNumber): 
    print "And the next number is... %d!" % fib_sequence 
+0

Проголосовало за то, чтобы закрыть как неясно, что вы просите. «Объяснить каждую строку в этом коде» не является вопросом по теме. Должен ли я начинать объяснять, что делает 'x = 0'? – timgeb

+2

Он вычисляет _all_ числа фибоначчи с верхним, но начинает сдаваться только после того, как числа больше, чем нижние. Что за вопрос? Как работает строка 'x, y = ...'? Или что делает «доходность»? –

+1

Базовая петля должна быть достаточно понятна для вас. Теперь сделайте вид, что «yield x» вместо этого «print x». Затем он будет четко печатать числа Фибоначчи между нижней и верхней границами, включительно, правильно? Итак, что делает 'yield'? Это делает «fib» генератором, производя те же значения по одному по мере необходимости. Результат может быть использован везде, где требуется итератор. Если это вас смущает, я предлагаю прочитать о генераторах. –

ответ

1

Функция def fib(... возвращает список, в котором можно перебирать с помощью for i in <return val by fib>

Я думаю, ваша главная путаница вокруг yield части. То, что он делает, это помнить прошлые значения (например, val x и y), и в следующий раз, когда он будет продолжаться с предыдущих значений, и всякий раз, когда он видит yield, он добавляет, что уступило значение (x здесь) в возвращаемом списке.

https://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/

Эта статья очистить все ваши сомнения.

Cheers!

+0

Спасибо .. Это уточняет мои сомнения. – Koushic

+0

Happy Learning :) –