2013-12-21 44 views
4

我試圖找到給定範圍內的所有奇數的總和,但我無法弄清楚如何指定哪些數字是奇數。我的教授說要用「用數字編號」來訪問範圍內的元素。這是我迄今爲止所擁有的。在列表中添加奇數

numbers = range(0, 10) 

def addOddNumbers(numbers): 
    for num in numbers: 
     if num % 2 == 1: 
      return sum 
     print sum(numbers) 

if __name__ == '__main__': 
    addOddNumbers(numbers) 

回答

3

你快到了;使用num % 2是測試奇數和偶數的正確方法。

return它在執行時退出函數。遇到第一個奇數時,函數返回。

,如果你使用一個循環,不要使用sum(),只需直接添加的數字:

def addOddNumbers(numbers): 
    total = 0 
    for num in numbers: 
     if num % 2 == 1: 
      total += num 
    print total 

可以首先建立sum()奇數號碼的列表:

def addOddNumbers(numbers): 
    odd = [] 
    for num in numbers: 
     if num % 2 == 1: 
      odd.append(num) 
    print sum(odd) 

對於sum(),可以使用生成器表達式:

def addOddNumbers(numbers): 
    print sum(num for num in numbers if num % 2 == 1) 
+0

當你設定總數= 0時究竟做了什麼?總數+ =數字是做什麼的? – PhysicsLemur

+0

@ user3081186:你需要在'total'中有* a *號碼才能夠爲其添加更多值。總而言之,從'0'開始是一個好的開始。 –

+0

total + = num只是將總數加起來並將其存回總計。 – Thayne

-2

模運算符「%」是你想要的,並且已經使用了。然而,模返回餘數,所以偶數除以2的餘數爲0

所以,你想改變:

if num % 2 == 1: 

if num % 2 == 0: 
+1

他想要所有的奇數,所以'num%2 == 1'是正確的。 –

1

你可以這樣做:

def addOddNumbers(numbers): 
    return sum(num for num in numbers if num % 2 == 1) # or use print instead of return 

要打印它,如果您使用返回,您將在打印語句的函數調用之前:

print addOddNumbers(numbers) 

您的發言return sum剛剛返回sum功能(沒有別的),並退出addOddNumbers功能。

print sum(numbers)實際上只是打印每一個數字的號碼總和:

你的循環,如果需要一個變量來跟蹤你的總:

total = 0 
for n in numbers: 
    if n % 2 == 1: 
     total += n # total accumulates the sum of all odd numbers then you can return or print it 
2

我可以提出一個小的調整,以馬亭彼得的優秀答案?

爲了讓您的方法更加靈活,請嘗試將範圍合併到方法中。它會使你的方法能夠將任何列表中的奇數值相加。另外,我打開了你的方法簽名以使其符合Python的風格指南PEP8,只是被挑剔這裏:)

def add_odd_numbers(max_list_value): 
    numbers = range(0, max_list_value) 
    total = 0 
    for num in numbers: 
     if num % 2 == 1: 
      total += num 
    return total 

if __name__ == '__main__': 
    print add_odd_numbers(10) 
0

只是爲了使回答的形式快速評論。如果您想列出0到10之間的所有奇數,那麼結束點並不重要。如果列表從0到11,那麼結束點很重要。請記住,range(0,11) = [0,1,2,3,4,5,6,7,8,9,10],並且將不包括11


我們解釋正在使用發電機。按照您的定義使用numbers進行列表,您可以執行此操作。

odds = [] 
for num in numbers: 
    if num % 2 == 1: 
     odds.append(num) 

這會給你odds = [1,3,5,7,9]。 Python有一些調用列表理解的功能,使得像這樣的事情變得很容易。以上可以很容易地這樣寫

odds = [num for num in number if num % 2 == 1] 

既然你想和關閉列表中的所有數字和sum函數採用列表,答案就是

sum([num for num in number if num % 2 == 1]) 

注意,大多數的答案沒有括號。這是因爲沒有它,它就成爲一個發電機。

odds = (num for num in number if num % 2 ==) 
print odds #--> <generator object <genexpr> at 0x7f9d220669b0> 
odds.next() # 1 
odds.next() # 3 
... 

由於sum需要這些以及和發電機比列表,這就是爲什麼最好的答案是

sum(num for num in numbers if num % 2 == 1) 
0

相信sum(range(1,end_number,2)將工作做好,易於更快,更內存密集型,.