我正在尝试创建一个程序,用于打印文件中某些值的平均值。当我使用文件' cropdata.txt'运行我的代码时,其中包含以下内容:
Lettuce 1 2 3
Tomato 6 5 1
我收到以下错误:
line_mean = (sum(line_parts[1:])/len(line_parts))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
我不确定为什么这是因为我认为我已将所选元素转换为整数。
我的代码:
file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
for line in file_numsort_1:
line = (line.rstrip(" \n"))
line_parts = line.split(' ')
for num in line_parts[1:]:
num=int(num)
line_mean = (sum(line_parts[1:])/len(line_parts))
print(line_mean)
答案 0 :(得分:1)
您的代码
for num in line_parts[1:]:
num=int(num)
并没有真正做任何事情,因为变量num
会在循环的每次迭代中被覆盖。因此,没有任何数据从str
转换为int
类型,这是导致错误的原因。你想要做的是创建一个数字列表:
file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
for line in file_numsort_1:
line = (line.rstrip(" \n"))
line_parts = line.split(' ')
num_list = []
for num in line_parts[1:]:
num_list.append(int(num))
line_mean = sum(num_list)/float(len(num_list))
其他一些注意事项:
line.split(' ')
有点多余,因为line.split()
会自动拆分空白分隔符。它还将连续空格计为一个分隔符line = line.rstrip()
不需要参数,你当然不需要括号括号float()
计算添加了line_mean
功能。在Python 2中,对两个整数的操作保持为整数(因此5/3 = 1,而不是1.66)。 答案 1 :(得分:1)
转换后如此num=int(num)
,您没有将转换保存回列表中
尝试转换如下:
line_parts = [int(x) for x in line_parts[1:]]
然后总结如下:
line_mean = (sum(line_parts)/len(line_parts))
或者,您可以使用statistics模块而不是自己求和。
优化版本:
import statistics
file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
for line in file_numsort_1:
# Strip, split, and convert to int
line_ints = map(int, line.rstrip().split()[1:])
# Print the mean
print(statistics.mean(line_ints))
答案 2 :(得分:0)
问题不在于sum
,而在于“数字”列表,这可以解决您的问题:
line_parts = line.split(' ')
list_of_nums = [int(item) for item in line_parts[1:]]
line_mean = (sum(list_of_nums)/len(C))
print(line_mean)