2015-10-19 33 views
-4

试图把浮点数()到处,但我仍然得到相同的消息。“TypeError:浮点数是必需的”即使困难,我写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) 
+6

显示你的'lists'变量,请 –

+0

何时以及如何'listitem'奇迹般地成为'volume'? –

+5

此问题缺少一些内容。首先,你的缩进是错误的。然后我们不知道getAmountOfCarbon()是什么。你使用碳名字两次为不同的事情 - 这有点混乱。最后,我们不知道是什么抛出了错误。 –

回答

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在第二循环中仍然是第一循环创建的卷的完整列表,你正试图转换是列表一个“碳“值(因此TypeError),并将其附加到原始lists中的每个值的carbon列表!这似乎没有多大意义。

相反,试试这个:

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: 
     .... 
+0

解决了它,非常感谢! –

+0

它工作正常,直到我为另一个计算添加另一个循环,现在我再次得到相同的消息。 问题必须在其他地方 –

+0

@ErikAngerfistNyström说实话,我宁愿认为你又犯了同样的错误。 –

0

: 以不同的方式解决它进行一些更改,假设您的列表变量是ints/float的列表的I已经成功地执行你的榜样(还假定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

好猜。希望提问者关心使问题与答案匹配。 ;-) – Wolf

+1

让我们拭目以待... – jlnabais

+0

这给出了相同的错误 –