Python 所有斐波那契数的总和达到一百万

Python 所有斐波那契数的总和达到一百万,python,Python,我刚刚开始做project Euler问题2,想知道是否有人可以帮我修复此脚本: def fib(): x,y = 0,1 while True: yield x x,y = y, x+y def even(seq): for number in seq: if not number % 2: yield number def under_a_million(seq): for numbe

我刚刚开始做project Euler问题2,想知道是否有人可以帮我修复此脚本:

def fib():
    x,y = 0,1
    while True:
        yield x
        x,y = y, x+y

def even(seq):
    for number in seq:
        if not number % 2:
            yield number

def under_a_million(seq):
    for number in seq:
        if number > 4000000:
            break
        yield number   

print sum(even(under_a_million(fib())))

这段代码应该找到所有斐波那契数的和,直到一百万。现在我在7号线遇到了一些问题

您的代码可以毫无问题地运行。
至少是我版本之后的版本

如果代码中出现错误,可能是因为缩进错误? 我运行这段代码没有问题

注意,问题是“值不超过400万的斐波那契序列,求偶数项之和”

所以

def fib():
x、 y=0,1
尽管如此:
产量x
x、 y=y,x+y
def偶数(seq):
对于序号中的数字:
如果不是编号%2:
产量
百万美元以下的def(序号):
对于序号中的数字:

如果数字>4000000:#您好,Seamonkey,欢迎来到SO。我很高兴你在这个问题上比上一个问题付出了更多的努力:)

我将与您一步一步地浏览代码。对于简单的问题,我发现不使用函数更容易,因为当必须处理全局变量时,函数可能会令人讨厌

#This part of the code gets the entire fibonacci sequence
list_of_numbers = []
even_fibs = []
x,y = 0,1 #sets x to 0, y to 1
while y <= 4000000: #Gets numbers till 4 million
    list_of_numbers.append(y)
    x, y = y, x+y #updates the fib sequence
在这里,我测试了数字列表中的数字是否为偶数。如果是,我将它们添加到
偶数fibs
列表中。你可以仔细阅读清单

这只是输出我们的发现


因为您似乎喜欢函数,所以我在这里添加了代码。这个解释和上面的解释是一样的

#This part of the code gets the entire fibonacci sequence
list_of_numbers = []
even_fibs = []

def fib(list_of_numbers):

    x,y = 0,1 #sets x to 0, y to 1
    while x+y <= 4000000: #Gets numbers till 4 million
        list_of_numbers.append(y)
        x, y = y, x+y #updates the fib sequence
    return list_of_numbers

def even(list_of_numbers, even_fibs):
    coord = 0
    for number in range(len(list_of_numbers)):
        test_number = list_of_numbers [coord]

        if (test_number % 2) == 0:
            even_fibs.append(test_number)
        coord+=1
    return even_fibs

fib(list_of_numbers) #call fib function

even(list_of_numbers, even_fibs) #Call the even function
#Output
print "Normal:  ", list_of_numbers
print "\nEven Numbers: ", even_fibs
print "\nSum of Even Numbers:  ", sum(even_fibs)
#这部分代码获取整个斐波那契序列
数字列表=[]
偶数fibs=[]
def fib(编号列表):
x、 y=0,1#将x设置为0,y设置为1

而下面的x+y是我针对Euler 2挑战的简单函数。在Python3.0中,我希望它能提供一些见解

def sum_even_fib(n):#n is the upper_limit value for item in fib list
    list_numbers=[]
    a,b=0,1#initializing
    while b<n:#exits if condition fail
        list_numbers.append(b)
        a,b=b,a+b
    even_fib =[i for i in list_numbers if i%2==0]
    result=sum(even_fib)
    return result
def sum_偶fib(n):#n是fib列表中项目的上限值
列表编号=[]
a、 b=0,1#初始化

虽然对代码进行双缩进,使其显示为代码,但看起来缩进有点混乱。看看它,把它弄直此外,发布准确的回溯通常对这些事情很有帮助。我将您的代码复制并粘贴到一个文件中,并使用python 2.7运行了该文件,效果良好。很抱歉没有包含回溯。没有。只是第7行的一条红线。@seamonkey8:FYI,问题陈述是400万条红线?我不知道您使用的是什么编辑器,但它可能会警告您混合了空格和制表符之类的内容。要进行检查,请使用python-t运行

print "Normal:  ", list_of_numbers #outputs full sequence
print "\nEven Numbers: ", even_fibs #outputs even numbers
print "\nSum of Even Numbers:  ", sum(even_fibs) #outputs the sum of even numbers
#This part of the code gets the entire fibonacci sequence
list_of_numbers = []
even_fibs = []

def fib(list_of_numbers):

    x,y = 0,1 #sets x to 0, y to 1
    while x+y <= 4000000: #Gets numbers till 4 million
        list_of_numbers.append(y)
        x, y = y, x+y #updates the fib sequence
    return list_of_numbers

def even(list_of_numbers, even_fibs):
    coord = 0
    for number in range(len(list_of_numbers)):
        test_number = list_of_numbers [coord]

        if (test_number % 2) == 0:
            even_fibs.append(test_number)
        coord+=1
    return even_fibs

fib(list_of_numbers) #call fib function

even(list_of_numbers, even_fibs) #Call the even function
#Output
print "Normal:  ", list_of_numbers
print "\nEven Numbers: ", even_fibs
print "\nSum of Even Numbers:  ", sum(even_fibs)
def sum_even_fib(n):#n is the upper_limit value for item in fib list
    list_numbers=[]
    a,b=0,1#initializing
    while b<n:#exits if condition fail
        list_numbers.append(b)
        a,b=b,a+b
    even_fib =[i for i in list_numbers if i%2==0]
    result=sum(even_fib)
    return result