初学者python错误:从文件中读取和添加数字

时间:2015-11-25 03:17:09

标签: python string int

所以我试图从文件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()的

5 个答案:

答案 0 :(得分:1)

您有两个问题。第一个是其他答案所说的 - 你正在阅读字符串。您需要将它们转换为数字数据类型。这可以是intfloat(如果您正在使用货币值,我建议使用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)

错误会告诉您确切的问题:您要添加intstrinttotalstrline。文件中的所有内容都是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在循环开始之前修改一次,一次修改循环。