尝试计算总和时出错:Python 3

时间:2015-10-18 23:58:28

标签: python

## Open the file and make a list
file = [line.rstrip() for line in open("numbers.txt", 'r')]
for number in file:
## Declare some variables
        smallest = min(file)
        largest = max(file)
        counter = len(file)
        total = sum(file)
## Display the values
print("Smallest: " + smallest)
print("Largest: " + largest)
print("Count: " + str(counter))
print("Sum: " + str(total))

我在尝试计算总和时遇到此错误。 TypeError:+:' int'不支持的操作数类型和' str'

1 个答案:

答案 0 :(得分:2)

file中的每个项目都是表示文件中一行的字符串。无论你在那里有什么,你都不能在字符串上调用sum()。如果它们是数字,那么您将无法拨打len(),因为这不会对数字起作用。您还要为每一行计算新的smallestlargestcountersum,因此只会保存最近一行的结果。甚至工作过。

错误消息的确切原因是sum()的工作原理是将每个项目从传递给它的任何可迭代项添加到初始值。默认初始值为0。因此,它首先尝试添加例如0 + '12'并失败,因为您正在添加int + str。您可以传递自定义初始值,例如sum([[1],[2]], [])生成[1, 2],但它不能使用字符串,因为您需要使用str.join。如果您尝试例如,它甚至会在特定的错误消息中说出这一点sum(['a', 'b'], '')

假设您的文件每行有一个数字。然后,您可以将它们全部转换为float s,而不需要对它们进行显式循环。我们还使用单个空格的默认分隔符将多个参数传递给print(),这样我们就不必进行任何字符串转换或连接。使用with构造作为上下文管理器也会更好,它会在块结束时自动关闭文件句柄:

with open('numbers.txt') as f:
    numbers = list(map(float, f))
print("Smallest:", min(numbers))
print("Largest:", max(numbers))
print("Count:", len(numbers))
print("Sum:", sum(numbers))