2013-04-30 4 views
1

Я новичок в Python, и у меня возникают проблемы, обертывая голову вокруг, почему это не работает.Использование цикла for для добавления значений в список

number_string = input("Enter some numbers: ") 

# Create List 
number_list = [0] 

# Create variable to use as accumulator 
total = 0 

# Use for loop to take single int from string and put in list 
for num in number_string: 
    number_list.append(num) 

# Sum the list 
for value in number_list: 
    total += value 

print(total) 

В принципе, я хочу пользователю ввести 123, например, а затем получить сумму 1 и 2 и 3.

Я получаю эту ошибку и не знаю, как бороться с ним.

Traceback (most recent call last): 
    File "/Users/nathanlakes/Desktop/Q12.py", line 15, in <module> 
    total += value 
TypeError: unsupported operand type(s) for +=: 'int' and 'str' 

Я просто не могу найти ответ на это в моем учебнике и не понимаю, почему мой второй цикл не будет перебирать список и накапливают значение для всего.

ответ

9

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

Попробуйте изменить эту строку:

number_list.append(num) 

Для этого:

number_list.append(int(num)) 

В качестве альтернативы, более Pythonic способ сделать это было бы использовать функцию sum() и map() преобразовать каждую строку в ваш первоначальный список целых чисел:

number_string = input("Enter some numbers: ") 

print(sum(map(int, number_string))) 

Помните, что если вы введете что-то вроде «123abc», ваша программа выйдет из строя. Если вам интересно, посмотрите на обработку exceptions, в частности ValueError.

+2

Я согласен, что это рабочее решение, но на основе имен имеет больше смысла, чтобы преобразовать его в целое число при добавлении его в список под названием «number_list». В противном случае ему нужно будет бросать каждый раз, когда он использует числа. – eandersson

+0

Согласен, я редактировал свой пост. –

+0

, так вы можете предположить, что когда я присоединяюсь к списку, я добавляю int() – Aaron

0

Изменение линии:

total += int(value) 

или

total = total + int(value) 

P.S. Обе строки кода эквивалентны.

0

Вот официальная документация о ввода в Python 3

input([prompt]) 

If the prompt argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that. When EOF is read, EOFError is raised. Example: 

>>> s = input('--> ') 
--> Monty Python's Flying Circus 
>>> s 
"Monty Python's Flying Circus" 

Так что, когда вы делаете вход в первой строке, например, вы в основном получать строки.

Теперь вам нужно преобразовать эти строки в INT перед суммированием. Таким образом, вы в основном делают:

total = total + int(value) 

О Debugging:

Когда в подобной ситуации, когда вы получаете ошибки, как: неподдерживаемый тип операнда (ов) для + =: «Int» и «ул», вам может использовать функцию ().

Doing type (num) сообщит вам, что это строка. Очевидно, строка и int не могут быть добавлены.

`

0

Я предполагаю, что люди правильно указали на недостаток в коде то есть преобразование типа из строки в целое. Однако следующее более вещий способ написания той же логике:

number_string = input("Enter some numbers: ") 
print sum(int(n) for n in number_string) 

Здесь мы используем генератор, список понимание и библиотечную функцию суммы.

>>> number_string = "123" 
>>> sum(int(n) for n in number_string) 
6 
>>> 

EDIT:

number_string = input("Enter some numbers: ") 
print sum(map(int, number_string)) 
+2

Или' sum (map (int, number_string)) '. – Johnsyweb

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