更新:Python平均收入读取和写入文件

时间:2014-12-03 02:38:28

标签: python typeerror readfile writefile

我正在编写一个代码来查找家庭平均收入,以及有多少家庭处于贫困线以下。

到目前为止这是我的代码

def povertyLevel():

inFile = open('program10.txt', 'r')
outFile = open('program10-out.txt', 'w')

outFile.write(str("%12s  %12s %15s\n" % ("Account #", "Income", "Members")))

lineRead = inFile.readline()       # Read first record
while lineRead != '':              # While there are more records

   words = lineRead.split()        # Split the records into substrings
   acctNum = int(words[0])         # Convert first substring to integer
   annualIncome = float(words[1])  # Convert second substring to float
   members = int(words[2])         # Convert third substring to integer

   outFile.write(str("%10d  %15.2f  %10d\n" % (acctNum, annualIncome, members)))

   lineRead = inFile.readline()    # Read next record


# Close the file.
inFile.close() # Close file

调用主函数。

povertyLevel()

我想找到年度收入的平均值,我试图做的是

avgIncome =(sum(annualIncome)/ len(annualIncome)) outFile.write(avgIncome)

我在while lineRead里面做了这个。但它给我一个错误说

avgIncome =(sum(annualIncome)/ len(annualIncome)) TypeError:'float'对象不可迭代

目前我正在努力寻找超过平均收入的家庭。

2 个答案:

答案 0 :(得分:4)

avgIncome需要sequence(例如list)(感谢correction,Magenta Nova。),但其论据annualIncomefloat

annualIncome = float(words[1])

在我看来,你想建立一个清单:

allIncomes = []
while lineRead != '':
    ...
    allIncomes.append(annualIncome)

averageInc = avgIncome(allIncomes)

(请注意,avgIncome调用的缩进级别少一个。)

此外,一旦你开始工作,我强烈建议你去https://codereview.stackexchange.com/旅行。您可以获得很多关于改进方法的反馈。

修改

根据您的编辑,我的建议仍然有效。在进行比较之前,您需要首先计算平均值。获得平均值后,您需要再次循环数据以比较每个收入。注意:我建议以某种方式为第二个循环保存数据,而不是重新分析文件。 (您甚至可能希望将数据与完全平均计算数据分开。)最好用新对象或namedtupledict来完成。

答案 1 :(得分:2)

sum()和len()都将iterable作为参数。阅读python文档以获取有关iterables的更多信息。你将浮动作为参数传递给它们。获得浮点数的总和或长度意味着什么?即使在编码世界之外思考,也难以理解。

您似乎需要查看python类型的基础知识。