[英]Sum of even integers from a to b in Python
這是我的代碼:
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。我不知道出了什么問題。
您的縮進已關閉,它應該是:
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)
將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)
通過正確使用 range 函數的 step 參數,您可以使其簡單得多。
def sum_even(a, b):
return sum(range(a + a%2, b + 1, 2))
你不需要循環; 你可以使用簡單的代數:
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
縮進在 Python 中很重要。 您編寫的代碼在第一個項目處理后返回。
如果 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))
當然,您可以添加一些代碼來防止 a 等於或大於 b 等。
這可能是使用 range 函數的一種簡單方法。 范圍內的第三個數字是步數,即 0, 2, 4, 6...100
sum = 0
for even_number in range(0,102,2):
sum += even_number
print (sum)
def sum_even(a,b):
count = 0
for i in range(a, b):
if(i % 2 == 0):
count += i
return count
這里有兩個錯誤:
起始數和結束數(含)之間所有偶數的總和。
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)
高級 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
偶數的總和,包括最小和最大數字:
def sum_evens(minimum, maximum):
sum=0
for i in range(minimum, maximum+1):
if i%2==0:
sum = sum +i
i= i+1
return sum
print(sum_evens(2, 6))
輸出為:12
sum_evens(2, 6) -> 12 (2 + 4 + 6 = 12)
基於列表的方法,如果要包含最后一個值,請使用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]
這會將 1 到 10 之間的所有偶數值相加,並輸出存儲在變量 x 中的答案
x = 0
for i in range (1,10):
if i %2 == 0:
x = x+1
print(x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.