2015-10-19 3 views
-4

Попытка поставить float() всюду, но я все равно получаю то же сообщение.«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) 

Edit: решаемые это по-другому:

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) и добавьте его в список 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: 
     .... 
+0

Это решило, спасибо вам большое! –

+0

он работал нормально, пока я не добавил еще один цикл для другого вычисления, теперь я снова получаю то же сообщение. Проблема должна быть в elswhere –

+0

@ ErikAngerfistNyström Честно говоря, я бы предпочел, чтобы вы повторили ту же ошибку. –

0

Сделав несколько изменений, предполагая, что ваша переменная списков представляет собой список ints/floats, которые я выполняю соновской ваш пример успешно (также предполагается, что listitem и volume одинаковы):

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

Это дает ту же ошибку –

Смежные вопросы