我正在编写一个代码来查找家庭平均收入,以及有多少家庭处于贫困线以下。
到目前为止这是我的代码
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'对象不可迭代
目前我正在努力寻找超过平均收入的家庭。
答案 0 :(得分:4)
avgIncome
需要sequence(例如list
)(感谢correction,Magenta Nova。),但其论据annualIncome
是float
:
annualIncome = float(words[1])
在我看来,你想建立一个清单:
allIncomes = []
while lineRead != '':
...
allIncomes.append(annualIncome)
averageInc = avgIncome(allIncomes)
(请注意,avgIncome
调用的缩进级别少一个。)
此外,一旦你开始工作,我强烈建议你去https://codereview.stackexchange.com/旅行。您可以获得很多关于改进方法的反馈。
修改强>
根据您的编辑,我的建议仍然有效。在进行比较之前,您需要首先计算平均值。获得平均值后,您需要再次循环数据以比较每个收入。注意:我建议以某种方式为第二个循环保存数据,而不是重新分析文件。 (您甚至可能希望将数据与完全平均计算数据分开。)最好用新对象或namedtuple
或dict
来完成。
答案 1 :(得分:2)
sum()和len()都将iterable作为参数。阅读python文档以获取有关iterables的更多信息。你将浮动作为参数传递给它们。获得浮点数的总和或长度意味着什么?即使在编码世界之外思考,也难以理解。
您似乎需要查看python类型的基础知识。