"TypeError: a float is required even tough i write float()"

2024-09-29 20:31:34 发布

您现在位置: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)

My lists变量是一个函数:

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)

Tags: in编辑forreturndefitemlistsheight
2条回答

好吧,我想现在我明白问题所在了。似乎您在代码中这样做:

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”值(因此是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:
        ....

做一些更改,假设您的lists变量是一个int/float列表,我已经成功地执行了您的示例(还假设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

相关问题 更多 >

    热门问题