【发布时间】:2015-03-19 02:28:23
【问题描述】:
我正在上在线课程,我们被分配了以下任务:
“编写一个提示输入文件名的程序,然后打开该文件并通读该文件,查找以下形式的行: X-DSPAM-置信度:0.8475 计算这些行并从每行中提取浮点值并计算这些值的平均值并产生如下所示的输出。 您可以在http://www.pythonlearn.com/code/mbox-short.txt 下载示例数据,当您在下面进行测试时,输入 mbox-short.txt 作为文件名。”
所需的输出是:“平均垃圾邮件置信度:0.750718518519”
这是我写的代码:
fname = raw_input("Enter file name: ")
fh = open(fname)
inp = fh.read()
for line in inp:
if not line.strip().startswith("X-DSPAM-Confidence: 0.8475") : continue
pos = line.find(':')
num = float(line[pos+1:])
total = float(num)
count = float(total + 1)
print 'Average spam confidence: ', float( total / count )
我得到的输出是:“平均垃圾邮件置信度:nan”
我错过了什么?
【问题讨论】:
-
试着找出你的变量的值是什么。
-
一方面你没有找到任何东西......如果不是 line.strip().startswith("X-DSPAM-Confidence: 0.8475")......这将找到开始的行with if not line.strip().startswith("X-DSPAM-Confidence: 0.8475"),但是除非它们都说 X-DSPAM-Confidence: 0.8475,否则您不会找到其他行。因此,您没有返回带有浮点数(总计/计数)的数字,因为您没有附加或添加任何数字
-
当你得到正确的前缀时,你不会跳出 for 循环。你应该颠倒那个条件。
标签: python python-2.7