2014-01-05 63 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