Почему мой for l oop не работает, а мой while l oop работает? - PullRequest
0 голосов
/ 14 июля 2020

[Заранее извините, я новичок в программировании.]

Это проблема №2 проекта Эйлера. Цель состоит в том, чтобы вычислить сумму всех четных чисел Фибоначчи, не превышающих 4 миллиона. Для тех, кто не знаком с числами Фибоначчи, число Фибоначчи - это просто число, которое является суммой двух предыдущих чисел в последовательности. Например, первые несколько чисел Фибоначчи: 1,2,3,5,8,13,21,34 ...

Мой код ниже начинается с некоторых переменных, затем my while l oop, и, наконец, мой for l oop.

n = 0
n2 = 1
fibsum = 0
fibrange = range(1,4000001)

while (n2 <= 4000000):
    n2 = n2 + n
    n = n2 - n
    if n2 % 2 == 0:
        fibsum += n2
print (fibsum)


# for n2 in fibrange:
#     n2 = n2 + n
#     n = n2 - n
#     if n2 % 2 == 0:
#         fibsum += n2
# print(fibsum)

Как я уже сказал, мой while l oop работает как шарм, но когда я запускаю for l oop, вывод fibsum равен 0. Значит, значение вообще не меняется.

Я пробовал range (1, 4000001) вместо fibrange. Я действительно не знаю, что еще попробовать. Это как моя 4-я или 5-я программа.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Использование for l oop в функции range, Значение переменной n2 изменяется только в соответствии с функцией range. Вы не можете вручную изменить переменную в for l oop при использовании range функция.

0 голосов
/ 14 июля 2020

for и while и представляют собой разные типы циклов.

while: повторяет оператор или группу операторов, пока данное условие истинно. Он проверяет условие перед выполнением тела l oop.

for: выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной l oop.

С while можно сделать что-то вроде этого:

a = 0
b = 1
target = 4000000
result = 0

while a <= target:
    if a % 2 == 0:
        result +=a
    a, b = b, a + b
print(result)

С for:

a, b = 0, 1
result = 0
target = 4000000
fib_sequence = 35  # -> the length of fibonacci sequence

for _ in range(fib_sequence):
    if a % 2 == 0:
        result +=a
    a, b = b, a + b
    if a >= target: break
print(result)
...