即时创建一个程序,该程序对序列中的值求和,但它具有交替加/减。
我想使这个序列的总和为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)
答案 0 :(得分: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
作为变量名称,因为该名称已由我上面使用的built-in function sum
使用。)
答案 1 :(得分: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)
答案 2 :(得分:0)
另一个版本......
def f(n):
return sum(pow(-1,x)/(2*x +1) for x in range(n))
print(f(4))
0.7238095238095239
答案 3 :(得分:0)
可以应用于更广泛的应用程序的方法可以是使用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)