-
我写了一段代码,从文本文件,并生成一个数字列表。
-
我的挑战是对连续的数字求和,然后找到数字的平均值。
-
我不允许使用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";。
希望它能有所帮助!!!