"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.
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.
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.
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]
# -*- 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