Это в основном из следующего условия -
if new % 2 == 0:
в сочетании с линией - new=number[x] + number[x-1]
в начале цикла.
Первое число Фибоначчи рассчитать это 3
, из-за указанных выше условиях, она фактически никогда не добавляется к number
, и, следовательно, в каждом цикле вы снова вычисления же 1+2
, поскольку number
фактически никогда не изменяется.
Проблема не из-за строки - new=0
в начале цикла, как и в другом ответе, объясняют (эта линия не имеет никакого эффекта, вы можете удалить ее и увидеть те же результаты).
Если ваша цель состоит в том, чтобы получить список всех четных чисел Фибоначчи, то вы можете сделать -
numbers = [2]
a, b = 1, 2
while b < 1000:
x = int(len(numbers) - 1)
a, b = b, a+b
if b % 2 == 0:
numbers.append(b)
print sum(numbers)
Demo -
>>> numbers = [2]
>>> a, b = 1, 2
>>> while b < 1000:
... x = int(len(numbers) - 1)
... a, b = b, a+b
... if b % 2 == 0:
... numbers.append(b)
...
>>> print(sum(numbers))
798
Является ли это текущий код. Вместо того, чтобы работать навсегда, ваш скрипт будет биться в то время как новый <1000, потому что новый не определен в этот момент. На стороне заметки многие программисты избегают использования «нового» в качестве имени переменной, потому что это ключевое слово на многих языках. – e4c5
Что вы пытаетесь сделать? Вы пытаетесь получить сумму даже чисел фибоначчи? –
'new' всегда' 3', поэтому всегда меньше 1000. – ozgur