更新: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”是一个拼写错误;谢谢你的更正。