[英]beginners python error: reading and adding numbers from a file
所以我想从文件numbers.txt中提取数字并将它们加在一起。 该程序当前可以一次拉出一个数字,并将它们打印成一行。 我现在需要它来汇总所有值。 文件中的数字为:9 19 15 17 5 17总数应为82,但它将仅将两个数字相加17并输出34
def main():
numfile = open('numbers.txt', 'r')
for line in numfile:
line = line.rstrip('\n')
print (line, end=' ')
total = int(line)
total += total
print ("\nEnd of file")
print (total)
numfile.close()
主要()
你有两个问题。 首先是其他答案所说的-您正在按字符串阅读。 您需要将它们转换为数字数据类型。 这可以是int
或float
(或者,如果您要使用货币值,建议使用decimal
)。
很简单,这可以像这样完成:
total += float(line)
其次,每次执行for
循环时,都将total
重置为0
。 因此,在循环结束时, total
将等于您读取的最后一个值。
若要更正此问题,请从循环中拉出total = 0
:
total = 0
for line in numfile:
...
将字符串转换为整数:
total += int(line)
您需要将line
转换为整数。 目前,您正在尝试将字符串添加到整数,这是不可能的。 只需将line
包装在int()
,如下所示:
total += int(line)
该错误告诉您确切的问题:您正在添加int
和str
。 int
是total
, str
是line
。 文件中的所有内容均为str
类型。 要解决该错误,请执行total += int(line)
。
在开始循环之前,您还需要初始化total
,否则它将保持重置为零的状态,只剩下最终值。
总体而言,您可以简化代码,如下所示:
with open('numbers.txt') as f:
print(sum(map(int, f)))
它将文件迭代器映射到int
,然后将它们与sum
,然后用print
打印它。
您需要在循环之前而不是循环内部初始化total
。 您也将total
加倍而不是累计。 尝试这个:
def main():
numfile = open('numbers.txt', 'r')
total = 0 # initialize here
for line in numfile:
line = line.rstrip('\n')
print (line, end=' ')
total += int(line) #/ accumulate here
print ("\nEnd of file")
print (total)
numfile.close()
main()
请注意,在循环开始之前和循环内部一次修改了total
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.