所以我试图从文件numbers.txt中提取数字并将它们加在一起。该程序当前可以一次拉出一个数字,并在一行上打印出它们。我现在需要它来计算所有的值。文件中的数字是: 9 19 15 17 五 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()
main()的
答案 0 :(得分:1)
您有两个问题。第一个是其他答案所说的 - 你正在阅读字符串。您需要将它们转换为数字数据类型。这可以是int
或float
(如果您正在使用货币值,我建议使用decimal
)。
很简单,这可以这样做:
total += float(line)
其次,每次进行total
循环时,您都会将0
重置为for
。因此,在循环结束时,total
将等于您读取的最后一个值。
要解决此问题,请将total = 0
拉出循环:
total = 0
for line in numfile:
...
答案 1 :(得分:0)
将字符串转换为int:
total += int(line)
答案 2 :(得分:0)
您需要将line
转换为整数。目前,您正在尝试将字符串添加到整数,这是不可能的。只需将line
包裹在int()
中,就像这样:
total += int(line)
答案 3 :(得分:0)
错误会告诉您确切的问题:您要添加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
进行打印。
答案 4 :(得分:0)
您需要在循环之前初始化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
在循环开始之前修改一次,一次修改循环。