2016-10-01 1 views
2

, поэтому я хотел бы перебирать последовательность Fibonacci (но это может относиться к любой неарифметической последовательности). Я написали функцию fibonacci:Итерация через последовательность Фибоначчи

from math import sqrt 
def F(n): 
    return ((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5)) 

, который возвращает число фибоначчи для любого заданного ввода. этот бит работает нормально. Тем не менее, я хотел бы включить несколько условий, таких как четные числа, и F (n) ниже определенного предела. Я попытался используя, если цикл, как это:

def ser(): 
    count = 0 
    for i in F(n): 
     if F(n) <= 4000000 and F(n) % 2 == 0: 
      count = count + F(n) 

Но, похоже, вы не можете использовать F (п) в итерации цикла, как я сделал. Я полный новичок на python, так как лучше всего использовать функцию F (n), созданную мной для повторения последовательности? Спасибо

+1

Что такое 'F (n)'? Он не определен. – zvone

+1

Я не вижу, что вы создали функцию 'F()'. Вы создали функцию 'fibonacci()'. –

+0

Если ваша функция 'F (n)' возвращает целое число, просто измените цикл на 'для i в xrange (F (n))', и он будет работать. – zipa

ответ

0

Что такое диапазон n, на котором вы хотите использовать число фибоначчи?
Ваше определение Фибоначчи находится в закрытой форме, так что вам нужно, чтобы дать каждому номер, который вы хотите вычислить:

import itertools 
count = 0 
for n in itertools.count(1): 
    if F(n) > 4000000: 
     break 
    if F(n) % 2 == 0: 
     count += F(n) 

Вы можете использовать форму генератор Фибоначчи и использовать itertools.takewhile() ограничить вывод:

def F(): 
    a,b = 0,1 
    yield b 
    while True: 
     a, b = b, a + b 
     yield b 

count = sum(f for f in it.takewhile(lambda x: x <= 4000000, F()) if f % 2 == 0) 
+0

OK, поэтому я хочу, чтобы n как F (n) <1000, например, чтобы все числа Фибоначчи, которые меньше 1000 и нечетны, например, или заканчиваются на 7. – sahwahn

+0

Это установило бы максимальный вход для F (n), а не значение F (n). – AChampion

+0

Хорошо, поймите, что ваш вопрос больше - вам нужно перерыв в вашей петле ... см. Обновление. – AChampion