使用python求和和和求平均


  • 我写了一段代码,从文本文件,并生成一个数字列表。

  • 我的挑战是对连续的数字求和,然后找到数字的平均值。

  • 我不允许使用sum函数,而且我是python的新手。。这是我迄今为止写的代码,

我能做些什么来添加到列表中

fh = open(fname)
for line in fh:
if line.startswith("X-DSPAM-Confidence:") : continue
#    print(line)
count = 0
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
count = count + 1
#       print(count)
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
#       print(line)
xpos = line.find(' ')
#       print(xpos)
num = line[xpos : ]
#       print(float(num))
fnum = float(num)       
#       print(fnum)

total = 0
for i in fnum:
total += int(i) 
print(total)

错误:"float对象在第24行不可迭代。。。第24行是环路的第4行

首先,一个打开的文件只能迭代一次,代码显示4个以for line in fh:开头的循环。在第一个循环之后,文件指针将到达文件的末尾,随后的循环应该立即返回。因此,应优先选择with

接下来,在循环的某个地方,您将获得fnum中的浮点值。只需在开始循环之前初始化total,并在获得fnum时添加它:

total = 0
with open(fname) as fh:
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
#       print(line)
xpos = line.find(' ')
#       print(xpos)
num = line[xpos : ]
#       print(float(num))
fnum = float(num)       
#       print(fnum)
total += fnum
#       print(total)

with确保在循环结束时干净地关闭文件。

fnum是一个浮点值。它不是数组,因此它不可迭代,也不能在for循环中迭代。

你可能不需要一个数组来确定总数和平均值:

fname = "c:\mbox-short.txt"
fh = open(fname)
count = 0
total = 0
for line in fh:
if line.startswith("X-DSPAM-Confidence:"):
xpos = line.find(' ')
num = line[xpos : ]
fnum = float(num)       
total += fnum
count += 1
print("Total = " + str(total))
print("Average = " + str(total / count))
print("Number of items = " + str(count))

在这种情况下,您不必使用startsWith。最好对文件的每一行使用拆分。每行将把所有单词拆分成一个列表。然后使用您要查找的索引,X-DSPAM确认:。如果存在,则取相应的兴趣值。在这种情况下,它是索引号1。以下是代码:

total = 0
number_of_items = 0
with open("dat.txt", 'r') as f:
for line in f:
fields = line.split()
if fields != []:
if fields[0] == "X-DSPAM-Confidence:":
number_of_items += 1
total += float(fields[1])
print(total)
print(number_of_items)      
avg = (total/number_of_items)    
print(avg)

我把你的数据保存在一个文本文件名中;dat.txt";。

希望它能有所帮助!!!

最新更新