Python中的正负序列
我正在创建一个程序,用来计算一个数列的总和,但这个数列的加减是交替进行的。
我想要计算这个数列的总和:1-(1/3)+(1/5)-(1/7)....我该如何像之前的例子那样使用交替的加法和减法呢?
这是我到目前为止写的代码:
s=input("Ingrese el numero de terminos a sumar:", )
sum=1.0
num=1.0
for i in xrange(1,s+1):
ident=sum/(i+(i+1.0))
sum=sum+-ident
print "La suma de los",s,"terminos es %.2f"%(sum)
4 个回答
0
首先,获取输入:
n = input("Input how many numbers you want to add")
接下来,你可以初始化一个总和:你可能需要做一些测试,以确保 n
是一个整数(int
)..
total = 1
然后是循环。你可以用一些数学方法来判断是加还是减:
for i in range(3, 3+2*n, 2):
if ((i-3)/2)%2 == 1:
total -= (1/i)
else:
total += (1/i)
或者使用 arshajii 的小技巧(这个技巧相当聪明):
for i in range(1, 1+n):
num = 2*i + 1
total += ((-1)**i)*(1/num)
0
另一个版本...
def f(n):
return sum(pow(-1,x)/(2*x +1) for x in range(n))
print(f(4))
0.7238095238095239
1
一种可以适用于更多不同应用的方法是使用一个 bool
类型的变量。你只需要在初始化其他变量的时候一起初始化它,并且每次需要的时候改变它的值就可以了。
s=input("Ingrese el numero de terminos a sumar:", )
add = False
sum=1.0
num=1.0
for i in xrange(1,s+1):
ident=sum/(i+(i+1.0))
if add:
sum += ident
else:
sum -= ident
add = !add
print "La suma de los",s,"terminos es %.2f"%(sum)
3
你可以把 -1
这个数,抬到你当前所处项的索引的幂上:
>>> (-1)**0
1
>>> (-1)**1
-1
>>> (-1)**2
1
>>> (-1)**3
-1
>>> (-1)**4
1
因此,整个求和的过程可以简化为
result = sum((-1)**i * 1.0/(2*i + 1) for i in xrange(s))
(你不应该把 sum
用作变量名,因为这个名字已经被我上面提到的 内置函数 sum
占用了。)