python for循环计算方程



我被要求写一个函数,它应该返回以下系列1000 + 1/1**2 + 1/2**2 + 1/3**2 + 1/4**2 + ... + 1/n**2的和对于给定的整数n。例如,当n = 0时,函数应该返回1000,当n = 1时,函数应该返回1001,对于n = 2,函数应该返回1001.25,对于n = 3,函数应该返回1001.3611111111111,等等

我知道这需要通过for循环和范围函数来完成。这是我的代码

if n<0:
return None
if n>0 or n==0:
for i in range(1,n-1):
result=1000+1/(i**2)
return result

但是当n= 0,1,2,3时,它一直返回None我不知道如何修复这个代码…

在每次迭代中,您都不会使用result的前一个值来更新它。(你也过早地返回result。)使用result = result + 1 / (i ** 2)或等价的result += 1 / (i ** 2)更新变量。

def foo(n):
result = 1000
for i in range(1, n+1):
result += 1 / (i ** 2)
return result
print(foo(0), foo(1), foo(2), foo(3)) # 1000 1001.0 1001.25 1001.3611111111111

或者,使用(生成器)推导式,

def foo(n):
return 1000 + sum(1 / (i ** 2) for i in range(1, n + 1))

不需要任何if语句。你现在正在做的是计算result,然后立即返回第1步的结果。

result = 1000
for i in range(1,n+1):
result += 1/(i**2)
return result

如果有任何不合理的地方请注释

首先,您只能从函数内部返回,但是您的代码中没有包含函数定义—可能您忘记了。其次,如果这段代码是函数的一部分,那么循环的第一次迭代将在它击中return时将您抛出函数,因此该函数如果实现,将不会完成预期的循环迭代。由于这是一个家庭作业问题,我不会完成代码,但我希望这能给你一个开始。

最新更新