使用for循环在列表中添加值

时间:2013-04-30 10:15:00

标签: python python-3.x

我是Python的新手,我无法解决为什么这不起作用。

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'

我在教科书中找不到答案,并且不明白为什么我的第二个for循环不会迭代列表并将值累加到总数。

4 个答案:

答案 0 :(得分:10)

您需要先将字符串转换为整数,然后才能添加它们。

尝试更改此行:

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

答案 1 :(得分:0)

将行更改为:

total += int(value)

total = total + int(value)

P.S。两个代码行都是等价的。

答案 2 :(得分: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)

关于调试:

当遇到类似情况时,如果出现以下错误:+ =''int'和'str'的不支持的操作数类型,则可以使用 type()函数。

执行type(num)会告诉你它是一个字符串。显然无法添加字符串 int

`

答案 3 :(得分:0)

我猜人们已经正确地指出了代码中的缺陷,即从字符串到int的类型转换。然而,以下是编写相同逻辑的更加pythonic方式:

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
>>> 

编辑:

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