Programmation fonctionnelle dans Python Project Euler 2

Problem 2

"Nombre pair de Fibonacci"

Les termes de la suite de Fibonacci sont la somme des deux termes précédents. Si les deux premiers termes sont 1, 2, alors les 10 premiers termes sont:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Trouvez la somme des termes de valeur paire avec une valeur de colonne numérique de 4 millions ou moins.

Liste infinie

Il n'est pas possible de définir une liste de longueur infinie dans les langages de programmation courants. Cependant, étant donné que le langage fonctionnel a un mécanisme appelé évaluation du retard et qu'une liste infinie peut être facilement créée, il s'agit d'une méthode fonctionnelle pour définir la séquence de nombres de Fibonacci comme une liste infinie. À proprement parler, il n'est pas possible de créer une liste infinie en Python, mais vous pouvez utiliser un générateur pour exprimer quelque chose proche d'une liste infinie.

Générateur

Une fonction normale renvoie une valeur avec return, mais une fonction de générateur renvoie une valeur avec yield.

Fonction générateur


def generate():
    n = 1
    yield n
    n += 1
    yield n
    n += 1
    yield n

L'exécution de la fonction générateur crée un objet générateur.

>>> generator = generate()
>>> for i in generator:
...     print(i)
... 
1
2
3

Lorsqu'il est appelé la première fois, il renvoie une valeur sur le premier rendement et s'arrête là. Lorsqu'il est appelé pour la deuxième fois, le traitement commence à partir du point où il a été interrompu la dernière fois, renvoie une valeur au rendement suivant et y interrompt. La différence avec return est que yield ne quitte pas la fonction même si la valeur est renvoyée.

fonction Take While

Le module itertools fournit des fonctions à utiliser dans la programmation fonctionnelle. Ce problème utilise la fonction take while pour récupérer uniquement les éléments inférieurs ou égaux à 4000000. La fonction take while crée un itérateur qui renvoie des éléments uniquement lorsque les conditions sont remplies. Contrairement à la fonction de filtre, si la condition n'est pas remplie une seule fois, les éléments suivants ne seront pas renvoyés.

>>> from itertools import takewhile
>>> x = takewhile(lambda n: n < 10, range(100))
>>> list(x)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Exemple de réponse

# -*- coding: UTF-8 -*-
from itertools import takewhile

def generateFibonacci():
    '''Fonction générateur pour générer la séquence de Fibonacci'''
    n1, n2 = 1, 2
    while True:
        yield n1
        n1, n2 = n2, n1 + n2

#Créez une séquence de Fibonacci avec une fonction de générateur.
fibonacci_sequence = generateFibonacci()

#Utilisez la fonction take while pour réduire la plage aux éléments de 4000000 ou moins.
fibonaccis = takewhile(lambda n: n <= 4000000, fibonacci_sequence)

#Extraire uniquement les nombres pairs avec la fonction de filtre.
even_fibonaccis = filter(lambda n: n % 2 == 0, fibonaccis)

answer = sum(even_fibonaccis)
print(answer)

Recommended Posts

Programmation fonctionnelle dans Python Project Euler 1
Programmation fonctionnelle dans Python Project Euler 3
Programmation fonctionnelle dans Python Project Euler 2
[Note] Projet Euler en Python (problème 1-22)
Projet Euler # 5 "Minimum Multiple" en Python
Programmation avec Python
Projet Euler # 15 "Lattice Path" en Python
Projet Euler # 4 "Calligraphie maximum" en Python
Projet Euler # 3 "Maximum Prime Factors" en Python
Projet Euler # 11 "Produit maximum dans la grille" en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Projet Euler # 9 "Numéro spécial Pitagolas" en Python
Projet Euler # 14 "Colonne de nombre de collats la plus longue" en Python
Essayez un tube de programmation fonctionnel en Python
Projet Euler # 2 "Even Fibonacci Number" en Python
Projet Euler # 17 "Nombre de caractères" en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Programmation Python avec Excel
Projet Euler # 8 "Produit maximum en chaîne numérique" en Python
Projet Euler # 10 "somme des nombres premiers" en Python
Projet Euler n ° 12 "Triangles hautement ajustés" en Python
Projet Euler # 13 "Somme des grands nombres" en Python
Projet Euler # 6 "Différence de somme des carrés" en Python
Entrez en contact avec la programmation fonctionnelle en JavaScript ou Python 3
Programmation GUI en Python avec Appjar
Projet Euler 37
Projet Euler 7
Projet Euler 47
Projet Euler 4
Projet Euler 38
Projet Euler 17
Projet Euler 26
Projet Euler 8
Projet Euler 23
Projet Euler 22
Projet Euler 19
Projet Euler 50
Projet Euler 42
Projet Euler 33
Projet Euler 43
Projet Euler 35
Projet Euler 36
Projet Euler 24
Projet Euler 46
Projet Euler 48
Projet Euler 45
Projet Euler 6
Projet Euler 44
Créer une documentation de projet Python dans Sphinx
Projet Euler 39
Projet Euler 40
Projet Euler 49
Projet Euler 29
Projet Euler 27
Projet Euler 41
Projet Euler 18
Projet Euler 11 "Produit maximum dans la grille"
Projet Euler 13
Projet Euler 30
Projet Euler 16