给定:两个正整数a和b(a
返回:从a到b的所有奇数整数的总和,包括在内。
#My code:
a = 100
b = 200
for i in range(a,b):
if i%2 == 1:
print i
目前它只是显示所有奇数整数的下拉列表。如果需要,我不知道如何恰当地贴上“范围”。如何添加上面的代码以获得所有奇数整数的总和?
由于
答案 0 :(得分:4)
如果奇数,请汇总a
和b
之间的所有数字。
sum(i for i in xrange(a, b) if i%2)
答案 1 :(得分:3)
一个相当快速的方法是:
result = 0
for i in range(a,b+1):
if i%2 == 1:
result += i
print result
答案 2 :(得分:1)
有很多方法可以做到这一点。但是,如果你考虑数学,那就像Gauss's old problem一样。高斯被要求添加1到100之间的数字,他意识到每对高低值总和为101(100 + 1,99 + 2,98 + 3 ......)
high = b
low = a
所以我们必须乘以一些b + a
个值。那里有多少?对于 all 整数,那只是
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 low, high, step: (high - low) * (high + low) // (2 * step)
现在这仍然不是完全你的问题的答案,因为它需要被偏移,这取决于你的低值是否为奇数,以及你的高值是否被包含或排除。但我会将其作为一种练习。
将此作为CW答案,以便有人可以编辑,如果我的数学很乱。
答案 3 :(得分:0)
一些数学技巧可以更有效地解决您的问题。
例如,前n个奇数的和= n * n square(n)
所以你可以用于
奇数之和[m,n] = n * n - (m-2)*(m-2)
where m!=1
和m and n are odds
另一个有用的分析是AP(算术级数)
公式:(n / 2)*(a + l)
where n= no. of elements, a = first term, l= last term
在这里,
a = m [如果m是奇数]
a = m + 1 [如果m是偶数]
l = n [如果n是奇数]
l = n-1 [如果n是偶数]
n =((1 - a)/ 2)+ 1
通过应用代码,您可以轻松获得答案......
答案 4 :(得分:0)
解决方案的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)