2014-01-05 92 views
0

問題是遍歷列表並計算並返回列表中任何數值的總和。Python:在列表中添加數字

這就是我到目前爲止已經寫...

def main(): 
    my_list = input("Enter a list: ") 
    total(my_list) 

def total(my_list1): 
    list_sum = 0 
    try: 
     for number in my_list1: 
      list_sum += number 
    except ValueError: 
     #don't know what to do here 

    print list_sum 

main() 
+0

想想ValueError是什麼時候發生的,當它發生時你想做什麼(skip?[continue?pass?](http://docs.python.org/2/tutorial/controlflow的.html))。是什麼讓你決定把for循環放在裏面,而不是在try/except之外。 – kalhartt

+0

你不應該以這種方式完全重寫你的問題。如果您有任何進一步的信息,請編輯它並將其添加到最後。 – Ffisegydd

+0

請停止刪除您的問題中的內容。我不得不在你的三個問題上回復三個編輯。謝謝 – TerryA

回答

3

可以使用generator表達這樣的:

from numbers import Number 

a = [1,2,3,'sss'] 

sum(x for x in a if isinstance(x,Number)) # 6 

這將遍歷列表,檢查每一個元素是否是int/float使用isinstance()

+0

這很酷:我還沒有看到'isinstance'匹配之前的模式元組。 – erewok

+0

您可能實際上想要使用'isinstance(x,numbers.Complex)'這裏 – Eric

+0

好點@Eric,編輯。 – Ffisegydd

1

也許嘗試和捕捉數字

這個接縫的工作:

data = [1,2,3,4,5, "hfhf", 6, 4] 
result= [] 
for d in data: 
    try: 
     if float(d): 
      result.append(d) 
    except: 
     pass  

print sum(result) #25, it is equal to 1+2+3+4+5+6+4 
0

使用發電機消除了以下線,但作爲一個方面說明的需要,當你爲做這樣的事這個:

try: 
    for number in my_list1: 
     list_sum += number 
except ValueError: 
    #don't know what to do here 

你需要在數字上調用float()來強制一個字符串被評估的ValueError。此外,有些東西需要遵循您的except,這可能只是pass或打印聲明。這種做法只能逃避當前循環,不能繼續計數。如前所述,如果您只是想忽略這些字符串,那麼使用生成器是最好的選擇。

def main(): 
    my_list = input("Enter a list: ") 
    total(my_list) 
    return 

def total(my_list1): 
    list_sum = 0 
    try: 
     for number in my_list1: 
      list_sum += float(number) 
    except ValueError: 
     print "Error" 
    return list_sum 

if __name__ == "__main__": 
    main() 
+0

如果__name__ ==「__main__」:main()呢? – user3161743

+1

請參閱[這裏](http://stackoverflow.com/questions/419163/what-does-if-name-main-do)。 – Ffisegydd