首页 文章

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

提问于
浏览
0

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

主要()

5 回答

  • 1

    你有两个问题 . 第一个是正如其他答案所说 - 你正在阅读字符串 . 您需要将它们转换为数字数据类型 . 这是 intfloat (或者如果您正在使用货币值,我建议使用decimal) .

    很简单,这可以这样做:

    total += float(line)
    

    其次,每次通过 for 循环时,您都会将 total 重置为 0 . 因此,在循环结束时, total 将等于您读取的最后一个值 .

    要解决此问题,请将 total = 0 拉出循环:

    total = 0
    for line in numfile:
        ...
    
  • 0

    将字符串转换为int:

    total += int(line)
    
  • 0

    您需要将 line 转换为整数 . 目前,你可能会这样做 . 只需在 int() 中包装 line ,如下所示:

    total += int(line)
    
  • 0

    该错误告诉您确切的问题:您正在添加 intstr . inttotalstrline . 文件中的所有内容都是 str 类型 . 要修复错误,请执行 total += int(line) .

    您还需要在开始循环之前初始化 total ,否则它将保持重置为零并且只留下最终值 .

    总的来说,您可以按如下方式简化代码:

    with open('numbers.txt') as f:
        print(sum(map(int, f)))
    

    这会将文件迭代器映射到 int ,然后使用 sum 添加它们,然后使用 print 打印它 .

  • 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 被修改为 once before the beginning 的循环和 once inside 循环 .

相关问题