2017-02-22 66 views
0

我知道前面已經提到過一個類似的問題,但我的情況略有不同。我想編寫一個函數,它接受一個正整數列表並返回位於奇數索引處的元素總和。問題是,我只想使用for循環或while循環。 這是我到目前爲止有:如何在Python中找到位於奇數索引處的元素總和

def getSumOdds(aList): 
for i in range(0, len(aList)): 
    if i%2 == 0: 
     pass 
    if i%2 != 0: 
     sum = sum + aList[i] 
     return sum 

然而,當我輸入驗證碼成Python,我得到一個錯誤說builtins.UnboundLocalError:賦值之前引用局部變量「和」。有誰知道更好的方式來找到總和或如何解決錯誤信息?提前致謝。

+0

當心命名變量是一樣的內置功能。這意味着你隱藏了這個功能。 –

回答

1

要解決這個問題,您應該在def之後將sum初始化爲零。另一件事是returnsumfor,而不是在最後if

(由於這個問題顯然是對一門功課,我寧願不討論先進的方法來解決問題本身。)

+0

我想說,如果OP已經顯示出一些努力,就可以回答作業問題。顯然他們有。 –

+0

@PaulRooney當然,我的意思是代碼可以進行大量優化,但這對目前的OP來說不太可能有所幫助。 –

1

您可以使用一臺發電機(或列表理解爲):

def getSumOdds(aList): 
    return sum(aList[i] for i in range(1,len(aList),2)) 

(給定索引支持(list支持此))。

,或者你可以像@MSeifert說,使用切片

def getSumOdds(aList): 
    return sum(aList[1::2]) 

(給定切片的支持,並不是所有的藏品做)

這就是你需要:sum是一個內置函數。

如果aList是發電機(你不能訪問實例個元素),你可以使用itertools.islice

from itertools import islice 

def getSumOdds(aList): 
    return sum(islice(aList,1,None,2)) 

您也可以使用列表等。這種方法(如只要aList是可迭代的)。

或者 - 再次給出索引支持 - 你可以把它放在一個for循環:

def getSumOdds(aList): 
    result = 0 
    for i in range(1,len(aList),2): 
     result += aList[i] 
    return result 
+2

爲什麼不只是'sum(aList [1 :: 2])'? – MSeifert

+0

@ MSeifert:是的,因爲它是一個列表,切片也是一個選項。將編輯。 –

+0

「我想只使用for循環或者while循環」說OP –

相關問題