Python中从a到b的偶数整数之和

时间:2012-12-10 21:00:20

标签: python python-3.x

这是我的代码:

def sum_even(a, b):
    count = 0
    for i in range(a, b, 1):
        if(i % 2 == 0):
            count += [i]
        return count

我放的一个例子是print(sum_even(3,7)),输出为0.我无法弄清楚出了什么问题。

13 个答案:

答案 0 :(得分:10)

你的缩进是关闭的,应该是:

def sum_even(a, b):
    count = 0
    for i in range(a, b, 1):
        if(i % 2 == 0):
            count += i
    return count

这样return count不会限制你的for循环(在这种情况下它将在第一次迭代时返回,导致它返回0)

(并将[i]更改为i


注意:另一个问题 - 使用range时应该小心:

>>> range(3,7)
[3, 4, 5, 6]

所以如果你打电话给:

  • sum_even(3,7)
  • sum_even(3,8)

现在,它们都会输出10,这对于3到8之间的偶数和的总和是不正确的。

你真正想要的可能是这样:

def sum_even(a, b):
    return sum(i for i in range(a, b + 1) if i % 2 == 0)

答案 1 :(得分:5)

  1. return语句移出for循环的范围(否则您将在第一次循环迭代时返回)。

  2. count += [i]更改为count += i


  3. 另外(不确定您是否知道这一点),range(a, b, 1)将包含ab - 1(不是b)的所有数字。此外,您不需要1参数:range(a,b)将具有相同的效果。因此,要包含ab的所有数字,您应该使用range(a, b+1)

    将所有偶数从a添加到b的最快方法可能是

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

答案 2 :(得分:4)

通过正确使用范围函数的步骤参数,可以使其简单得多。

def sum_even(a, b):
    return sum(range(a + a%2, b + 1, 2))

答案 3 :(得分:3)

你不需要循环;你可以使用简单的代数:

def sum_even(a, b):
    if (a % 2 == 1):
        a += 1
    if (b % 2 == 1):
        b -= 1
    return a * (0.5 - 0.25 * a) + b * (0.25 * b + 0.5)

修改

正如NPE所指出的,我上面的原始解决方案使用了浮点数学。我并不太关心,因为与删除循环相比,浮点数学的开销可以忽略不计(例如,如果调用sum_even(10, 10000))。此外,计算使用2的(负)幂,因此不应受舍入误差的影响。

无论如何,通过将所有内容乘以4然后再分割到最后的简单技巧,我们可以使用整数,这是更好的。

def sum_even(a, b):
    if (a % 2 == 1):
        a += 1
    if (b % 2 == 1):
        b -= 1
    return (a * (2 - a) + b * (2 + b)) // 4

答案 4 :(得分:1)

缩进在Python中很重要。您编写的代码在处理完第一个项目后返回。

答案 5 :(得分:1)

如果b接近2 ^ 32,我希望你看看你的循环是如何工作的;-) 正如马修所说,不需要循环,但他没有解释原因。

问题只是简单的算术序列wiki。这种顺序中所有项目的总和是:

      (a+b)  
Sn = ------- * n  
        2  

其中'a'是第一项,'b'是最后一项,'n'是项目编号。 如果我们制作'a'和b'偶数,我们可以很容易地解决给定的问题。 所以制作'a'和'b'就是:

if ((a & 1)==1):
    a = a + 1
if ((b & 1)==1):
    b = b - 1

现在想想我们在两个偶数之间有多少项 - 它是:

    b-a
n = --- + 1
     2 

把它放入等式中你得到:

      a+b       b-a 
Sn = ----- * ( ------ + 1)
       2         2

所以你的代码看起来像是:

def sum_even(a,b):
    if ((a & 1)==1):
        a = a + 1
    if ((b & 1)==1):
        b = b - 1
    return ((a+b)/2) * (1+((b-a)/2))

当然,您可以添加一些代码以防止等于或大于b等。

答案 6 :(得分:0)

def sum_even(a,b):
    count = 0
    for i in range(a, b):
        if(i % 2 == 0):
            count += i
     return count

这里有两个错误:

  • 添加i代替[i]
  • 在第一次迭代时直接返回值。将返回计数移出for循环

答案 7 :(得分:0)

开始结束数字之间的所有偶数数字的总和包含< /强>)。

 def addEvenNumbers(start,end):
  total = 0
  if end%2==0:
    for x in range(start,end):
      if x%2==0:
        total+=x
    return total+end
  else:
    for x in range(start,end):
      if x%2==0:
        total+=x
    return total
print addEvenNumbers(4,12)

答案 8 :(得分:0)

这可能是使用范围函数执行此操作的简单方法。 范围内的第三个数字是一个步骤数,即0,2,4,6 ... 100

sum = 0
for even_number in range(0,102,2):
    sum += even_number
print (sum)

答案 9 :(得分:0)

使用高级python功能更加花哨。

def sum(a,b):
    return a + b
def evensum(a,b):
    a = reduce(sum,[x for x in range(a,b) if x %2 ==0])
    return a

答案 10 :(得分:0)

偶数之和,包括最小和最大数:

APIView

输出为:12

sum_evens(2,6)-> 12(2 + 4 + 6 = 12)

答案 11 :(得分:0)

基于列表的方法, 如果您想包含最后一个值,请使用 b+1

def sum_even(a, b):
    even = [x for x in range (a, b) if x%2 ==0 ]
    return sum(even)
   
print(sum_even(3,6))
4

[Program finished]

答案 12 :(得分:-1)

这将把1到10之间的所有偶数值加起来并输出答案,该答案存储在变量x中

x = 0 
for i in range (1,10):
    if i %2 == 0:
        x = x+1
        print(x)