2015-09-27 3 views
0

Вот код:Почему мой скрипт Python работает навсегда?

numbers = [1, 2] 
while new < 1000: 
    new = 0 
    x = int(len(numbers) - 1) 
    new = numbers[x] + numbers[x-1] 
    if new % 2 == 0: 
     numbers.append(new) 
    new += 1 
print sum(numbers) 

Что я сделал не так? Критика приветствуется. Спасибо за ваше время.

+0

Является ли это текущий код. Вместо того, чтобы работать навсегда, ваш скрипт будет биться в то время как новый <1000, потому что новый не определен в этот момент. На стороне заметки многие программисты избегают использования «нового» в качестве имени переменной, потому что это ключевое слово на многих языках. – e4c5

+0

Что вы пытаетесь сделать? Вы пытаетесь получить сумму даже чисел фибоначчи? –

+0

'new' всегда' 3', поэтому всегда меньше 1000. – ozgur

ответ

-3

В начале цикла while вы устанавливаете new = 0, ваш цикл while всегда включен, а новый меньше 1000, что всегда будет.

+2

На первый взгляд это может выглядеть как причина, но это не так, новое также изменяется на 'numbers [x] + numbers [x + 1', 2 строки после. –

+0

Я думаю, что новое никогда не было действительно инициализировано. – LucasChilders

-1

Каждый раз, когда вы добавляете его в переменную new в свой цикл, вы возвращаете его обратно на 0, когда вы повторяете цикл! Это означает, что new никогда не достигнет 1000 - он будет продолжаться вечно в цикле.

Чтобы исправить это, переместите инициализацию new вне цикла.

+1

Вы попробовали запустить это? (Тем не менее, нигде). –

+0

@AnandSKumar только что попробовал. Честно говоря, я предполагал, что бесконечная петля была проблемой, а остальная часть программы была в порядке. –

1

Проблема в том, что ничего не обновляется.

numbers = [1, 2] 
while new < 1000: 
    new = 0 #you're resetting new here 
    x = int(len(numbers) - 1) 
    new = numbers[x] + numbers[x-1] # first iteration, gives 3 
    if new % 2 == 0: # 3 % 2 != 0, so it doesn't get run 
     numbers.append(new) 
    new += 1 # great, new is now 1. 
print sum(numbers) 

Каждая итерация цикла работает так, потому что ничего не меняется. Если вы хотите сделать Fibonacci, вы могли бы сделать что-то вроде этого

numbers = [1, 2] 
for _ in range(1000) 
    n = numbers[-1] + numbers[-2] # use negative indices to count from the end. 
    numbers.append(n) 
print sum(numbers) # sum of fibonacci I guess 
2

Это в основном из следующего условия -

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 
Смежные вопросы