2015-07-30 4 views
-4

Я пытаюсь найти средний балл из списка, если три числа, как показано ниже:TypeError неподдерживаемый тип операнда (ов) для/«ул» и «Int»

a = (lines.split(":")[1].split(",")[-3:]) 
Print (a) 
Averagescore = sum(a)/len(a) 
Print (averagescore) 

Тогда он говорит: typeerror неподдерживаемый тип операндов для/'str' и 'int'

+1

Сообщение errror довольно ясно. И нет «Печать», только «Печать». –

+0

Можете ли вы хотя бы сказать, в чем проблема? –

+0

Вам нужно преобразовать строки в 'a' в числа, чтобы сделать с ними арифметику. –

ответ

1

Я подозреваю, что сообщение об ошибке, как вы описали, может быть неточным для этого кода, но тем не менее проблема заключается в том, что вы пытаетесь лечить список строк как список int. например

>>> s = "1 16 32" # string 
>>> s.split() # this returns a list of strings 
['1', '16', '32'] 
>>> s.split()[0] + 1 # you can't add an int to a string 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: Can't convert 'int' object to str implicitly 

Если вы хотите, чтобы рассматривать их как Интс (или поплавки), то вам нужно будет добавить преобразование, как в

a = [int(n) for n in s.split()] 
a = [float(n) for n in s.split()] # alternatively 
+0

Большое спасибо, причина, по которой это меня озадачило, состояло в том, что я смог извлечь из нее наивысший балл как целое. Спасибо за то, что его очень ценят –

+1

@NickCollins: Вы _sure_, что ваше наивысшее извлечение баллов работает правильно? Остерегайтесь использования 'max()' или 'min()' для чисел в строковой форме - если числовые строки не все имеют одинаковое количество цифр, тогда результат будет не таким, как вы ожидаете, поскольку, например, '' 10 '<' 2''. –

+0

Да, я знаю об этом, я думаю, это потому, что у него был ключ = int в конце его. –

Смежные вопросы