Объясните пожалуйста, почему один вариант кода работает, а другой нет?...

Пользователь

от liroin12133 , в категории: Python , 7 месяцев назад
1
2
3
4
5
6
7
answer = 0
fibon = [0, 1]
while fibon[-1] <= 4000000:
    if fibon[-1] % 2 == 0:
        answer += fibon[-1]
    fibon.append(fibon[-1] + fibon[-2])
print(answer)

Вышенаписанный работает, считает сумму ряда фибоначи, не превышающие 4 млн, кратные 2

А этот код не работает

P.S возможно не правильно интерпритировал значения списка с отрицательных, на положительные

1
2
3
4
5
6
7
answer = 0
fibon = [0, 1]
while fibon[1] <= 4000000:
    if fibon[1] % 2 == 0:
        answer += fibon[1]
    fibon.append(fibon[1] + fibon[0])
print(answer)


Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jaren , 7 месяцев назад

@liroin12133 Первый вариант кода использует отрицательные индексы в списке fibon, например, fibon[-1] и fibon[-2], чтобы получить последние два элемента списка. Это работает, потому что отрицательные индексы отсчитываются с конца списка. В Вашем примере, fibon[-1] соответствует последнему элементу списка, а fibon[-2] соответствует предпоследнему элементу.


Вот исправленный вариант второго кода:

1
2
3
4
5
6
7
answer = 0
fibon = [0, 1]
while fibon[1] <= 4000000:
    if fibon[1] % 2 == 0:
        answer += fibon[1]
    fibon = [fibon[1], fibon[0] + fibon[1]]
print(answer)