【问题标题】:Extracting float number from a file从文件中提取浮点数
【发布时间】:2020-09-15 05:23:42
【问题描述】:

我正在学习一门 EdX 课程,其中要求我:编写一个提示输入文件名的程序,然后打开该文件并通读该文件,查找以下形式的行: X-DSPAM-置信度:0.8475 计算这些行并从每行中提取浮点值并计算这些值的平均值并产生如下所示的输出。不要在解决方案中使用 sum() 函数或名为 sum 的变量。 测试时可以在http://www.py4e.com/code3/mbox-short.txt下载示例数据,下面输入mbox-short.txt作为文件名。

我不想使用 string.split(),因为课程中没有教授它。

到目前为止,我面临的问题是我不知道如何提取浮点数并求和。

fname = input("Enter file name: ")
fh = open(fname)
count = 0
val = 0
for line in fh:
    if not line.startswith("X-DSPAM-Confidence:") :
        continue
    count = count+1
    found = line.find(":")
    data = float(line[found+1:])
    
val = val + data
avg = val/count
print("Average spam confindence", avg)

这是我一直在编写的代码,但它给了我下一个结果:

平均垃圾邮件置信度 0.036692592592592596

我应该得到:平均垃圾邮件置信度:0.750718518519 我相信这是因为浮点数的不同值没有加到总和中,如果你能帮我解决这个问题:)

【问题讨论】:

标签: python python-3.x


【解决方案1】:

首先,您不必这样做val = val + data,因为数据将是文件中找到的最后一个值,所以更新val 每次文件找到类似的浮点数

...
   data = float(line[found+1:])
   val += data
...

以上将防止数据被覆盖,并且您必须在不之前增加计数,因为如果您在找到数据之前增加计数的总和将为正常计数 +1

fname = input("Enter file name: ")
fh = open(fname)
count = 0
val = 0
for line in fh:
    if not line.startswith("X-DSPAM-Confidence:"):
        continue
    found = line.find(":")
    data = float(line[found+1:])
    val += data
    count += 1

avg = val / count
print("Average spam confindence", avg)

【讨论】:

  • 不知道“+=”这个东西,对于一个干净的代码来说非常漂亮,谢谢你的建议,这一切都是 val 缩进的问题。 :)
猜你喜欢
  • 2021-09-25
  • 2022-01-19
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多