Python 数列求和

Python 数列求和,python,math,sum,sequence,series,Python,Math,Sum,Sequence,Series,给定:两个正整数a和b(a Return:从a到b的所有奇数整数之和,包括在内 #My code: a = 100 b = 200 for i in range(a,b): if i%2 == 1: print i 目前,它只是显示所有奇数整数的下拉列表。如果需要,我不知道如何正确地将“范围”附加到该列表上。我如何添加到上面的代码中,以获得所有奇数整数的总和 谢谢一个相当快速的方法是: result = 0 for i

给定:两个正整数a和b(a Return:从a到b的所有奇数整数之和,包括在内

    #My code: 
    a = 100
    b = 200
    for i in range(a,b):
        if i%2 == 1:
            print i
目前,它只是显示所有奇数整数的下拉列表。如果需要,我不知道如何正确地将“范围”附加到该列表上。我如何添加到上面的代码中,以获得所有奇数整数的总和


谢谢

一个相当快速的方法是:

result = 0
for i in range(a,b+1):
  if i%2 == 1:
    result += i
print result

一个相当快速的方法是:

result = 0
for i in range(a,b+1):
  if i%2 == 1:
    result += i
print result

a
b
之间的所有数字相加(如果为奇数)

sum(i for i in xrange(a, b) if i%2)

a
b
之间的所有数字相加(如果为奇数)

sum(i for i in xrange(a, b) if i%2)

有很多方法可以做到这一点。但是,如果你考虑一下数学,它很像。高斯被要求将1和100之间的数字相加,他意识到每对高值和低值相加为101(100+1,99+2,98+3…)

所以我们必须乘以一些
b+a
值。有多少个?对于所有的整数,这就是

num_pairs = (high-low) // 2
然后我们将该数字乘以
high+low
,得到答案:

result = (high + low) * num_pairs
但是你只想要其他的,所以我们再除以二:

result //= 2
总共:

def sumrange(low, high, step):
     num_pairs = (high - low) // 2
     result = (high + low) * num_pairs
     return result // step
sumrange=lambda低、高、阶跃:(高-低)*(高+低)/(2*阶跃)

现在这仍然不是你问题的答案,因为它需要根据你的低值是否为奇数,以及你的高值是否被包含或排除来抵消。但我将把它作为练习


如果我的数学很混乱,那么有人可以编辑这个CW答案。

有很多方法可以做到这一点。但是,如果你考虑一下数学,它很像。高斯被要求将1到100之间的数字相加,他意识到每对高值和低值相加为101(100+1,99+2,98+3…)

所以我们必须乘以一些
b+a
值。有多少个?对于所有的整数,这就是

num_pairs = (high-low) // 2
然后我们将该数字乘以
high+low
,得到答案:

result = (high + low) * num_pairs
但是你只想要其他的,所以我们再除以二:

result //= 2
总共:

def sumrange(low, high, step):
     num_pairs = (high - low) // 2
     result = (high + low) * num_pairs
     return result // step
sumrange=lambda低、高、阶跃:(高-低)*(高+低)/(2*阶跃)

现在这仍然不是你问题的答案,因为它需要根据你的低值是否为奇数,以及你的高值是否被包含或排除来抵消。但我将把它作为练习


如果我的数学很糟糕,那么就把这个答案做成CW答案,这样别人就可以编辑了。

一些数学技巧可以更有效地解决你的问题

例如,前n个奇数之和=n*n
square(n)

所以你可以用

奇数之和[m,n]=n*n-(m-2)*(m-2)
其中m!=1
m和n是赔率

另一个有用的分析是AP(算术级数)

公式:(n/2)*(a+l)
,其中n=元件数量,a=第一项,l=最后一项

这里,

a=m[如果m为奇数]

a=m+1[如果m是偶数]

l=n[如果n为奇数]

l=n-1[如果n为偶数]

n=((l-a)/2)+1


通过在代码中应用,您可以很容易地得到答案…

一些数学技巧可以更有效地解决您的问题

例如,前n个奇数之和=n*n
square(n)

所以你可以用

奇数之和[m,n]=n*n-(m-2)*(m-2)
其中m!=1
m和n是赔率

另一个有用的分析是AP(算术级数)

公式:(n/2)*(a+l)
,其中n=元件数量,a=第一项,l=最后一项

这里,

a=m[如果m为奇数]

a=m+1[如果m是偶数]

l=n[如果n为奇数]

l=n-1[如果n为偶数]

n=((l-a)/2)+1


通过在代码中应用,您可以轻松获得答案…

和解决方案的numpy版本:

import numpy as np
a = 100
b = 200
r = np.linspace(a,b-1,b-a)
r = np.sum(np.mod(r,2)*r)
print(r)

以及解决方案的numpy版本:

import numpy as np
a = 100
b = 200
r = np.linspace(a,b-1,b-a)
r = np.sum(np.mod(r,2)*r)
print(r)

求和与
+
一起使用。您可以通过将值添加到变量(可能是
sum
)来求和。您可以在开始时将此变量设置为0,然后在迭代期间将
i
值添加到该变量中。顺便说一句,为什么您会在此处看到下拉列表?我看不到它将在何处生成。请注意
范围
仅从
开始>a
b-1
,所以你应该使用
范围(a,b+1)
。对于“下拉”列表定义,很抱歉。这是一个误导。我当时很忙。有人能推荐一个更好的标题吗???实际上这只是一个数学问题,与前面的问题类似。尝试类似
sumrange=lambda high,low,step=(high-low)*(高+低)/(2*步)
Summation与
+
一起工作。您可以通过将值添加到变量中来求和,可能是
sum
。您在开始时将此变量设置为0,然后在迭代期间将
i
值添加到该变量中。顺便问一句,为什么您会在此处看到下拉列表?我看不到它将在何处生成。请注意
range
只在前面m
a
b-1
,所以你应该使用
range(a,b+1)
。很抱歉“下拉”列表定义有误导性。我当时很忙。有人能推荐一个更好的标题吗???实际上这只是一个数学问题,与前面的问题类似。尝试类似
sumrange=lambda high,low,step=(high-low)*(高+低)/(2*步)
不要使用
sum
作为变量名。另外:为什么result=0的原因是什么?@Cloud定义一个变量来保存总和?一个更快的方法可能是检查a是否为奇数,如果不是,则检查
a+=1
,然后检查范围(a,b+1,2)中的i的
然后不再检查奇数。不要使用
sum
作为变量名。另外:为什么result=0的原因是什么?@Cloud定义一个变量来保存求和?一个更快的方法可能是检查a是否为奇数,如果不是,则检查
a+=1
,然后检查范围(a,b+1,2)中的i的
然后不要检查奇数