Python ValueError:float:参数:。第12行不是号码

时间:2017-10-07 02:20:33

标签: python python-3.x

好的,所以我是python的新手,我现在正在为每个人的课程(py4e)学习python。

我们的第7.2课分配是:

  

7.2编写一个提示输入文件名的程序,然后打开该文件并读取该文件,查找该表格的行:

X-DSPAM-Confidence:    0.8475
     

计算这些线并从每条线中提取浮点值并计算这些值的平均值并生成输出,如下所示。不要在解决方案中使用sum()函数或名为sum的变量。   您可以在下面测试时在http://www.py4e.com/code3/mbox-short.txt下载示例数据,输入mbox-short.txt作为文件名。

我无法理解。我一直收到这个错误

ValueError: float: Argument: . is not number on line 12

当我运行此代码时(见屏幕截图):https://gyazo.com/a61768894299970692155c819509db54 第{12行num = float(balue) + float(num)继续表演。当我从balue中移除浮子然后我得到另一个说

  

“TypeError:无法在第12行连接'str'和'float'对象”。

参数可以转换为浮点数还是只是一个字符串?这可能是问题,但我不知道它是否属实,即使它是我不知道如何修复我的代码。

4 个答案:

答案 0 :(得分:1)

我的方法并不是那么糟糕。但是,我没有得到你想要的for balue in linez,因为这是迭代linez中包含的字符。你宁愿想要浮动(linez)。我提出了一个看起来像这样的紧密解决方案:

fname = raw_input("Enter file name: ")
print(fname)

count = 0
num = 0
with open(fname, "r") as ins:
    for line in ins:
        line = line.rstrip()
        if line.startswith("X-DSPAM-Confidence:"):
            num += float(line[20:])
            count += 1

print(num/count)

这只是为了让你走上正轨,我没有验证答案或剧本的正确性,因为这应该包含在你的作业中。

答案 1 :(得分:0)

我意识到这已经得到回答-我正在做同样的课程,并且在这个确切的问题上有同样的错误消息。这是因为该行被读取为非浮点,所以我不得不将其读取为

number =float((line[19:26]))

顺便说一句,本课程中的Python环境对字符串中的空格非常敏感-我得到了正确的代码,但由于我输入了“:”,而它拒绝了它,因此正确的答案是“:”。小时冒号。

仅出于此目的,这是我得出的答案,该答案已被接受为正确的答案。希望你最终到达那里。

# Use the file name mbox-short.txt as the file name

count = 0
average = 0

filename = input("Enter file name: ")
filehandle = open(filename)

for line in filehandle:
    if not line.startswith("X-DSPAM-Confidence:") : continue

    line = line.rstrip()
    number =float((line[19:26]))

    count = count + 1
    average = average + number

average = (average / count)
average = float(average)
print("Average spam confidence:",average)

答案 2 :(得分:0)

#Take input from user
fname = input("Please inser file name:")


#try and except
try:
    fhand = open(fname)
except:
    print("File can not be found", fname)
    quit()

    
#count and total

count= 0
total = 0

for line in fhand:
    line = line.rstrip()
    if not line.startswith("X-DSPAM-Confidence:"):
        continue

    else:
        line = line[20:]
        uline = line.upper()
        fline = float(uline)

        count = count+1
        total = total + fline
        avr = total / count

print("Average spam confidence:" ,avr )

答案 3 :(得分:0)

您的问题的简短答案是修复字符串的切片以提取数字。

如果您要查找冒号字符,请使用“:”来查找浮点数, 请记住,您必须在切片中添加 +1 来对字符串进行切片。如果你不这样做,你最终会得到---->:0.8475 这不是一个数字。 因此,在字符串的起始索引中添加 +1 对字符串进行切片,您将得到修复。

相关问题