Funktionsprogrammierung in Python Project Euler 2

Problem 2

"Gerade Anzahl von Fibonacci"

Die Begriffe in der Fibonacci-Sequenz sind die Summe der beiden vorherigen Begriffe. Wenn die ersten beiden Begriffe 1, 2 sind, sind die ersten 10 Begriffe:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... Ermitteln Sie die Summe der geradzahligen Begriffe mit einem Zahlenspaltenwert von 4 Millionen oder weniger.

Unendliche Liste

Es ist nicht möglich, eine Liste mit unendlicher Länge in gängigen Programmiersprachen zu definieren. Da die funktionale Sprache jedoch einen Mechanismus hat, der als Verzögerungsauswertung bezeichnet wird, und eine unendliche Liste leicht erstellt werden kann, ist es eine funktionale Methode, die Fibonacci-Zahlenfolge als unendliche Liste zu definieren. Genau genommen ist es in Python nicht möglich, eine unendliche Liste zu erstellen, aber Sie können einen Generator verwenden, um etwas auszudrücken, das einer unendlichen Liste nahe kommt.

Generator

Eine normale Funktion gibt einen Wert mit Rückgabe zurück, eine Generatorfunktion gibt jedoch einen Wert mit Ausbeute zurück.

Generatorfunktion


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

Durch Ausführen der Generatorfunktion wird ein Generatorobjekt erstellt.

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

Beim ersten Aufruf wird ein Wert für die erste Rendite zurückgegeben und dort unterbrochen. Beim zweiten Aufruf beginnt die Verarbeitung an dem Punkt, an dem sie das letzte Mal unterbrochen wurde, gibt bei der nächsten Ausbeute einen Wert zurück und unterbricht sie dort. Der Unterschied zur Rückgabe besteht darin, dass die Rendite die Funktion auch dann nicht verlässt, wenn der Wert zurückgegeben wird.

Funktion übernehmen

Das Modul itertools bietet Funktionen zur Verwendung in der Funktionsprogrammierung. Dieses Problem verwendet die Funktion takewhile, um nur Elemente abzurufen, die kleiner oder gleich 4000000 sind. Die Funktion takewhile erstellt einen Iterator, der nur Elemente zurückgibt, wenn die Bedingungen erfüllt sind. Im Gegensatz zur Filterfunktion werden die nachfolgenden Elemente nicht zurückgegeben, wenn die Bedingung nicht einmal erfüllt ist.

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

Antwortbeispiel

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

def generateFibonacci():
    '''Generatorfunktion zum Generieren der Fibonacci-Sequenz'''
    n1, n2 = 1, 2
    while True:
        yield n1
        n1, n2 = n2, n1 + n2

#Erstellen Sie eine Fibonacci-Sequenz mit einer Generatorfunktion.
fibonacci_sequence = generateFibonacci()

#Verwenden Sie die Takewhile-Funktion, um den Bereich auf Elemente von 4000000 oder weniger einzugrenzen.
fibonaccis = takewhile(lambda n: n <= 4000000, fibonacci_sequence)

#Extrahieren Sie mit der Filterfunktion nur gerade Zahlen.
even_fibonaccis = filter(lambda n: n % 2 == 0, fibonaccis)

answer = sum(even_fibonaccis)
print(answer)

Recommended Posts

Funktionsprogrammierung in Python Project Euler 1
Funktionale Programmierung in Python Project Euler 3
Funktionsprogrammierung in Python Project Euler 2
[Hinweis] Project Euler in Python (Problem 1-22)
Projekt Euler # 5 "Minimum Multiple" in Python
Programmieren mit Python
Projekt Euler # 15 "Gitterpfad" in Python
Projekt Euler # 4 "Maximale Kalligraphie" in Python
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Projekt Euler # 11 "Maximales Produkt im Raster" in Python
Projekt Euler # 7 "1000 1. Primzahl" in Python
Projekt Euler # 16 "Summe der Kräfte" in Python
Projekt Euler # 9 "Spezielle Pitagolas-Nummer" in Python
Projekt Euler # 14 "Längste Spalte mit Kollatennummern" in Python
Probieren Sie eine funktionale Programmierpipe in Python aus
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Python-Programmierung mit Excel
Projekt Euler # 8 "Maximales Produkt in Anzahl Zeichenfolge" in Python
Projekt Euler # 10 "Summe der Primzahlen" in Python
Projekt Euler # 12 "Hochangepasste Dreiecke" in Python
Projekt Euler # 13 "Summe großer Zahlen" in Python
Projekt Euler # 6 "Differenz in der Summe der Quadrate" in Python
Nehmen Sie Kontakt mit der funktionalen Programmierung in JavaScript oder Python 3 auf
GUI-Programmierung in Python mit Appjar
Projekt Euler 37
Projekt Euler 7
Projekt Euler 47
Projekt Euler 4
Projekt Euler 38
Projekt Euler 17
Projekt Euler 26
Projekt Euler 8
Projekt Euler 23
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 42
Projekt Euler 33
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
Projekt Euler 46
Projekt Euler 48
Projekt Euler 45
Projekt Euler 6
Projekt Euler 44
Erstellen Sie eine Python-Projektdokumentation in Sphinx
Projekt Euler 39
Projekt Euler 40
Projekt Euler 49
Projekt Euler 29
Projekt Euler 27
Projekt Euler 41
Projekt Euler 18
Projekt Euler 11 "Maximales Produkt im Raster"
Projekt Euler 13
Projekt Euler 30
Projekt Euler 16