Как я могу добавить определенные значения, которые были созданы в цикле while с использованием Python - PullRequest
4 голосов
/ 24 декабря 2011

Я решал задачу Project Euler , которая выглядит следующим образом:

Рассматривая члены в последовательности Фибоначчи, значения которых не превышают четырех миллионов, найдите суммучетные термины. "

Итак, я использовал этот скрипт, чтобы напечатать последовательность Фибоначчи до четырех миллионов:

a = 0
b = 1
while b < 4000000:
    print b
    a, b = b, a+b

Очевидно, я мог бы запустить это и просто вручную добавитьчетные значения, но я чувствую, что я обманываю.

Технически, я предполагаю, что задаю два вопроса:

  1. Как я могу выбрать четности?
  2. Как я могу добавить эти четности, фактически не назначая их переменной?

О, и я уверен, что это чрезвычайно очевидно, но я очень новичок в ... хорошо,программирование в целом, и я могу легко потеряться в многословности экспертов. Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 24 декабря 2011

Если вы не любите назначения переменных, вам может понравиться функциональный подход :

>>> from itertools import takewhile, ifilter

>>> def fib():
        a, b = 0, 1
        while True:
            yield a
            a, b = b, a+b

>>> def is_even(x):
        return x % 2 == 0

>>> sum(ifilter(is_even, (takewhile(lambda x: x<4000000, fib()))))
4613732
2 голосов
/ 24 декабря 2011

Ах, Проект Эйлер!

Хотя это скорее математический вопрос, чем вопрос программирования.

На стороне программирования просто добавьте аккумулятор. Вы можете проверить равномерность, используя оператор по модулю %, который возвращает целочисленный остаток после деления левого операнда на правый операнд.

a, b = 0, 1
evens = 0
while b < 4000000:
    if not b%2:
        evens += b
    a, b = b, a+b

Как только вы получите ответ, Project Euler PDF и форумы заполнят вас в математической части этой проблемы и действительно ответят на ваши вопросы. Есть способы избежать вычисления каждого числа Фибоначчи и проверки на равномерность, но они требуют использования определенных математических свойств последовательности Фибоначчи.

1 голос
/ 24 декабря 2011

Как я могу выбрать четные числа?

Четные числа - это те, которые оставляют остаток от нуля, когда вы делите их на 2 (в целых числах).В Python мы получаем «остаток после деления на целое число» с помощью оператора %.

Однако есть еще один полезный трюк, который вы можете сделать здесь.Четные числа Фибоначчи - это каждое третье число в последовательности, и если вы можете строго доказать, почему, то вы будете близки к получению формулы, необходимой для простого генерирования последовательности четных чисел Фибоначчи.

Как я могу добавить эти четности, фактически не назначая их переменной?

Что плохого в назначении их переменной?Просто настройте еще один счетчик.

...