Форум сайта python.su
Начал пытаться решать задачи из проекта эйлера, и на второй уже возникла у меня трудность. Задача звучит так:
Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 10 элементов будут:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
Найдите сумму всех четных элементов ряда Фибоначчи, которые не превышают четыре миллиона.
Я попробовал сделать так:
x = 0 y = 1 for i in range(2, 4000000, y): if i % 2 == 0: x += i y += i if y % 2 == 0: x += y print(x)
Отредактировано MoJoVi (Март 25, 2019 07:17:21)
Офлайн
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
if __name__ == "__main__":
x = 2
y = 1
for i in range(2, 4000000, y):
y += i
if y % 2 == 0:
x += y
print(x)
Отредактировано Yuri197 (Март 24, 2019 21:25:22)
Офлайн
Yuri197Ну, проблема как была так и осталась, не изменилось ничего.
Если вы выполните ваш код так, то проблемы с глобальной переменной уже не будет. Другое дело, что и результата правильного не будет тоже. Насколько я понимаю, должно получиться число 4613732. Могу выложить решение.
Отредактировано MoJoVi (Март 25, 2019 07:18:47)
Офлайн
MoJoVi
по задумке при её изменении шаг тоже должен меняться, но шаг не изменяется и всегда равен 1
def my_range(start, stop, step=1): while start < stop: yield start start = start + step for i in my_range(1, 10, 2): print(i)
Офлайн
FishHookСпасибо за замечание, ошибку осознал обещаю исправиться.
Ваша проблема в том, что это по вашей задумке шаг должен изменяться, а по задумке авторов языка - нет. Функция range вызывается ОДИН раз при инициализации цикла. Если бы она вызывалась КАЖДЫЙ РАЗ, то на каждой итерации вы бы получали начальное значение диапазона.
FishHookТут дело в том что я неверно понимал принцип действия функции range, я совсем недавно начал учить питон, еще только набираюсь знаний. Буду пробовать другой способ, еще раз спасибо.
как по вашему, будет изменяться шаг, если вы будете изменять глобальную переменную?
Офлайн