3

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

4 回答 4

11

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

尝试更改此行:

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”之类的内容,您的程序将会崩溃。如果您有兴趣,请查看处理异常,特别是ValueError.

于 2013-04-30T10:17:22.657 回答
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) 会告诉你它是一个字符串。显然stringint不能添加。

`

于 2013-04-30T10:25:49.783 回答
0

将行更改为:

total += int(value)

或者

total = total + int(value)

PS 两行代码是等价的。

于 2013-04-30T10:23:04.343 回答
0

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

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

在这里,我们使用了生成器、列表推导和库函数 sum。

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

编辑:

number_string = input("Enter some numbers: ")
print  sum(map(int, number_string))
于 2013-04-30T10:29:16.423 回答