## 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'
答案 0 :(得分:2)
file
中的每个项目都是表示文件中一行的字符串。无论你在那里有什么,你都不能在字符串上调用sum()
。如果它们是数字,那么您将无法拨打len()
,因为这不会对数字起作用。您还要为每一行计算新的smallest
,largest
,counter
和sum
,因此只会保存最近一行的结果。甚至工作过。
错误消息的确切原因是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))