更新:Python平均收入读写文件
我写了一个代码来计算家庭的平均收入,以及有多少家庭生活在贫困线以下 这是到目前为止我的代码更新:Python平均收入读写文件,python,typeerror,readfile,writefile,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(
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
调用main函数。
povertyLevel()
我试图找到平均年收入,我试图做的是
平均收入=(总和(年收入)/len(年收入))
输出文件写入(avgIncome)
我是在while lineRead里做的。然而,它给了我一个错误的说法
平均收入=(总和(年收入)/len(年收入))
TypeError:“float”对象不可编辑
目前,我正试图找出哪个家庭的收入超过平均水平。
avgIncome
期望a(例如a)(感谢,品红新星),但它的论点annualIncome
是一个float
:
annualIncome = float(words[1])
在我看来,你似乎想要建立一个列表:
allIncomes = []
while lineRead != '':
...
allIncomes.append(annualIncome)
averageInc = avgIncome(allIncomes)
(注意,avgIncome
调用的缩进级别减少了一个。)
而且,一旦你能做到这一点,我强烈建议你去一趟美国。你可以得到很多关于改进方法的反馈
编辑:
根据你的编辑,我的建议仍然有效。在进行比较之前,您需要先计算平均值。一旦你有了平均值,你就需要再次循环数据来比较每个收入。注意:我建议以某种方式为第二个循环保存数据,而不是重新分析文件。(您甚至可能希望将读取数据与计算平均值完全分开。)最好使用新对象或名为tuple的或dict
sum()和len()作为参数。阅读python文档了解更多关于iterables的信息。您正在将一个浮点数作为参数传递给它们。得到浮点数的和或长度意味着什么?即使在编码领域之外思考,也很难理解这一点
看起来您需要复习python类型的基础知识 avgIncome.(annualIncome)=>点是什么意思?很抱歉,我写这篇文章时,它只是一个快速的类型。你在浮点上调用sum,sum需要一个列表?好吧,如果你知道Python认为元组是序列,并且知道从数学上讲,单个数字与该数字的1元组是一样的(但不知道这在Python中不是真的),你可能会认为sum(2.3)
是2.3
…但这可能适用于宇宙中的两个人,而不是询问者@abarnert我不认为一个元组和一个数字是一样的。元组定义为元素的有序列表。元组是长度为1的列表,而数字根本不是列表。区别就跟一个独立数字的一个元素集或一个一维向量一样大。@jpmc26:一个数字的Python 1元组显然不同于一个数字,但元组通常在集合论中定义的方式,或者在Haskell这样的编程语言中定义的方式是一样的。由3个整数组成的元组的类型是int*int*int
;整数和浮点元组的类型是int*float
;只有整数的元组的类型是int
。当然,在这些语言中,没有函数来获取元组的长度或和,因为这些元组不是序列(从列表的意义上说是序列)。@MagentaNova:正如我在jpmb26的回答中提到的,不需要任何iterable,它需要序列或其他大小的集合。例如,如果你输入了一个生成器或其他迭代器,或者一个第三方的单链表类型,它是可编辑的,但没有大小,这是行不通的。@abarnet:谢谢你完善了这一点,但这真的值得投下一票吗?@spusudiarbiter为了回应你的编辑,我在我的答案中添加了一些注释。两个小错误:第一,它是可迭代的,而不是可迭代的。更重要的是,这对任意的iterable不起作用;你想要的是一个序列。(虽然sum
对任何任意iterable都有效,sum(x)/len(x)
不会,原因有二:len
只对大小的集合有效,而不是所有的iterable都有效,整个过程只对非迭代器iterable有意义,否则x
在sum
调用后将为空“sequence”也不是很正确,它通常非常接近实际目的。)无论如何,我已经编辑了答案,说sequence
;当然,如果你愿意,请随意还原并更好地修复它。@abarnert“Iteratable”是一个拼写错误;谢谢你的更正。