Python中的加减序列
我正在创建一个程序,该程序可以对序列中的值求和,但它有交替的加号/减号Python中的加减序列,python,sequence,Python,Sequence,我正在创建一个程序,该程序可以对序列中的值求和,但它有交替的加号/减号 我想把这个序列的和变成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
我想把这个序列的和变成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
作为变量名,因为上面使用的I已经使用了该名称。)获取输入:
n = input("Input how many numbers you want to add")
之后,您可以初始化总和:(您可能需要进行一些测试,以确保n
是int
)
然后是循环。你可以用一些数学来检查你是否应该加减:
for i in range(3, 3+2*n, 2):
if ((i-3)/2)%2 == 1:
total -= (1/i)
else:
total += (1/i)
或者使用arshajii的小把戏(相当聪明):
另一个版本
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)
你的问题是什么?我怎么能像前面的例子一样使用加号和减号呢?不要用
sum
作为变量名。我假设你在学习python,python 3会是一个更好的起点。s
实际上可能是一个整数。使用print
语句意味着OP正在使用Python 2。@DSM在Python 2中,input()
函数进行自动转换??在上面的代码中,OP不会转换为int
@RSerrao是的,它会转换(假设输入了有效的int)。-1**i
是-(1**i)
,它始终等于-1。您需要将-1
放在括号中。
def f(n):
return sum(pow(-1,x)/(2*x +1) for x in range(n))
print(f(4))
0.7238095238095239
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)