2012-03-17 9 views
8

Odrabiam pracę domową i wymaga ona użycia funkcji sum() i len(), aby znaleźć średnią z listy numerów wejściowych, kiedy spróbowałem użyć sum(), aby uzyskać sumę listy, dostałem błąd TypeError: nieobsługiwane typy argumentów dla +: 'int' i 'str'. Oto mój kod:Jak korzystać z funkcji sum() dla listy w Pythonie?

numlist = input("Enter a list of number separated by commas: ") 

numlist = numlist.split(",") 

s = sum(numlist) 
l = len(numlist) 
m = float(s/l) 
print("mean:",m) 
+1

jaki był Twój wkład? – franka

+2

's = suma (map (int, numlist))' – cji

Odpowiedz

9

Problem polega na tym, że masz listę ciągów. Konwertuj je na liczby całkowite przed obliczeniem sumy. Na przykład:

numlist = numlist.split(",") 
numlist = map(int, numlist) 
s = sum(numlist) 
... 
13

Problem polega na tym, że kiedy czytasz z wejścia, masz listę ciągów. Możesz zrobić coś takiego jak twoją drugą linię:

numlist = [float(x) for x in numlist] 
0

Split zwraca tablicę ciągów, więc musisz przekonwertować te wartości na liczby całkowite przed użyciem funkcji sumowania.

3

Dodajesz ciągi, a nie liczby, co jest tym, co mówi Twój komunikat o błędzie.

Konwersja każdy łańcuch do odpowiedniej liczby całkowitej:

numlist = map(int, numlist) 

a następnie podjąć średnio (zauważ, że używam float() inaczej niż ty):

arithmetic_mean = float(sum(numlist))/len(numlist) 

chcesz użyć float() przed podzieleniem , jako float(1/2) = float(0) = 0.0, co nie jest tym, czego potrzebujesz.

Alternatywą byłoby po prostu zrobić je wszystkie float w pierwszej kolejności:

numlist = map(float, numlist) 
+0

O ile OP nie jest w Py3, w takim przypadku prawdziwy podział jest domyślny. – lvc

+0

Hmm, tak też może być. – Blender

0

Konwertuj dane wejściowe łańcucha na listę wartości zmiennoprzecinkowych. Oto zaktualizowany kod.

numlist = list(map(int,input("Enter a list of number separated by commas: ").split(','))) 
l = len(numlist) 
s = sum(numlist) 
print("mean :",s/l) 
0

dla Pythona 2.7

numlist = map(int,raw_input().split(",")) 
s = sum(numlist) 
l = len(numlist) 
m = float(s/l) 
print("mean:"+ str(m))