繁体   English   中英

Python中的正负序列

[英]Plus and minus sequence in 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)

您可以将-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 。)

输入:

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)

另一个版本...

def f(n): 
    return sum(pow(-1,x)/(2*x +1) for x in range(n))

print(f(4))
0.7238095238095239

可以应用到更广泛的应用中的一种方法是使用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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM