“TypeError:需要一个浮点数”甚至很难我写float()

时间:2015-10-19 14:11:09

标签: python

尝试将float()放在任何地方,但我仍然得到相同的消息。

def getAmountOfCarbon(volume):
    carbon = 1.8 + 2 * math.log(volume)
    return carbon

    carbon = []
    for listitem in lists:
        carbonlist = getAmountOfCarbon(volume)
        carbon.append(carbonlist)

我的列表变量是一个函数:

lists = readCSVfile(str1)

print carbon
TypeError: a float is required

我应该把我的浮动()放在哪里?

编辑:卷来自:

def getVolume(width, height, length):
    volume = (width) * (height) * (length) 
    return volume

编辑: 我在这里打电话:

volume = []
for listitem in lists:
    volumelist = getVolume(listitem[2], listitem[3], listitem[4])
    volume.append(volumelist)

编辑: 以不同的方式解决了它:

def createAnalyseList(lists):
    analyselist = []
    for item in lists:
        height = getHeightType(item[4])
        carbon = getAmountOfCarbon(getVolume(item[2],item[3],item[4]))
        analyselist.append([item[0], item[1], height, carbon])
    print analyselist
    return analyselist
analyselist = createAnalyseList(lists)

2 个答案:

答案 0 :(得分:0)

进行一些更改,假设您的列表变量是一个int / floats列表我已成功执行您的示例(也假设listitemvolume相同):

import math

def getAmountOfCarbon(volume):
    carbon = 1.8 + 2 * math.log(volume)
    return carbon

carbon = []

lists = [1.0, 5, 47, 89]

for listitem in lists:
    carbonlist = getAmountOfCarbon(listitem)
    carbon.append(carbonlist)

print carbon

答案 1 :(得分:0)

好的,我想我现在看到了问题所在。您似乎在代码中执行此操作:

lists = readCSVfile(str1)

volume = []
for listitem in lists:
    volumelist = getVolume(listitem[2], listitem[3], listitem[4])
    volume.append(volumelist)

carbon = []
for listitem in lists:
    carbonlist = getAmountOfCarbon(volume)
    carbon.append(carbonlist)

此处,第二个循环中的volume仍然是在第一个循环中创建的整个卷列表,并且您正尝试将该列表转换为一个" carbon&# 34;值{(TypeError)并将其附加到原始carbon中每个值的lists列表中!这似乎没有多大意义。

相反,试试这个:

carbon = []
for listitem in volume:
    carbonlist = getAmountOfCarbon(listitem)
    carbon.append(carbonlist)

或使用map(仅限Python 2):

carbon = map(getAmountOfCarbon, volume)

或者作为列表理解:

carbon = [getAmountOfCarbon(x) for x in volume]

或者一下子(未经测试):

carbon = [getAmountOfCarbon(volume(*lst[2:5])) for lst in lists]

另请注意,readCSVfile功能中的代码全部重复。你可以这样做:

def readCSVfile(str1):
    with open(str1 + '.csv', 'r+') as f:
        ....