Python 所有斐波那契数的总和达到一百万
我刚刚开始做project Euler问题2,想知道是否有人可以帮我修复此脚本: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
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