Python中的正负序列

2 投票
4 回答
7026 浏览
提问于 2025-04-18 15:51

我正在创建一个程序,用来计算一个数列的总和,但这个数列的加减是交替进行的。

我想要计算这个数列的总和: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 占用了。)

撰写回答