繁体   English   中英

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

[英]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()

主要()

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

该错误告诉您确切的问题:您正在添加intstr inttotalstrline 文件中的所有内容均为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM