到b这是我的代码:总和在Python
def sum_even(a, b):
count = 0
for i in range(a, b, 1):
if(i % 2 == 0):
count += [i]
return count
我把打印是(sum_even(3,7))的一个例子,输出为0。我想不出什么是错的。
到b这是我的代码:总和在Python
def sum_even(a, b):
count = 0
for i in range(a, b, 1):
if(i % 2 == 0):
count += [i]
return count
我把打印是(sum_even(3,7))的一个例子,输出为0。我想不出什么是错的。
你压痕是关闭的,它应该是:
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
)
注: ANO疗法的问题 - 你应该小心使用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)
我测试了print(sumEven(3,7)),输出结果为0 – knd15
@ knd15您是不是想用'print sum_even(3,7)'来测试它呢? –
@ knd15我在关于'范围'的答案中注意到了另一个问题,请确保你看到了编辑=) –
缩进在Python中很重要。您编写的代码在处理第一个项目后返回。
移动return
声明了for
循环的范围(否则你将返回在第一循环迭代)。
将count += [i]
更改为count += i
。
也(不知道你是否知道这一点),range(a, b, 1)
将包含所有号码从a
到b - 1
(不b
)。而且,您不需要1
参数:range(a,b)
将具有相同的效果。因此,要包含从a
到b
的所有数字,您应该使用range(a, b+1)
。
可能是所有的偶数添加从a
到b
的最快方法是在这里
sum(i for i in xrange(a, b + 1) if not i % 2)
+1,非常具有可读性和启发性 – dansalmo
def sum_even(a,b):
count = 0
for i in range(a, b):
if(i % 2 == 0):
count += i
return count
两个错误:
您不需要循环;您可以使用简单的代数:
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)
)。此外,计算使用两个(负)幂,所以不应该受到舍入误差的影响。
无论如何,用所有东西都乘以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;
如果它不使用浮点数学计算整数和。 – NPE
@NPE好点。请参阅我的编辑。 –
通过正确使用range函数的step参数,可以使它变得简单得多。
def sum_even(a, b):
return sum(range(a + a%2, b + 1, 2))
+1,而且要快得多。 – dansalmo
我想你看到你的循环是如何工作的。如果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等。
的开始和结束数(含)之间的所有甚至数的总和。
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)
这可能是一个简单的使用范围函数的方法。 在范围中的第三数目的工序数,即,0,2,4,6 ... 100
sum = 0
for even_number in range(0,102,2):
sum += even_number
print (sum)
点点花式具有先进蟒特征。
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
'总和(I为i的范围(A,B)若设为i%2 == 0)' –
考查等差级数。 –
哪个'if'语句是与'return'关联的?间距很重要。 – eh9