2016-12-23 33 views
-1

我试图从expense_calc函数中获得返回值的总和,但我面对的是“TypeError:'float'对象不可迭代”。我需要做些什么改变来解决这个错误?TypeError:'float'对象在使用总和时不可迭代

from nsetools import Nse 
    nse = Nse() 

#Name of stocks and buy prices 
stocks = { 
    "APLAPOLLO": 878.2, 
    "AVANTIFEED": 488.95, 
    "BALAMINES": 308.95 
} 

#Quantity of stocks 
qty = { 
    "APLAPOLLO": 10, 
    "AVANTIFEED": 10, 
    "BALAMINES": 10 
} 

def get_closing(stock): 
    """ 
    Function to obtain closePrice of stocks 
    """ 
    return nse.get_quote(stock)['buyPrice1'] 

def expenses_calc(buy,sell,qty): 
    """ 
    Function to calculate the applicable expenses 
    """ 
    stt = 0.10 
    ttc = 0.00325 
    service_tax = 15.0 
    sebi_charges = 0.0002 
    swacch_bharat_cess = 0.02 
    stamp_duty = 0.01 

    turnover = (buy * qty) + (sell * qty) 
    stt_total = (stt/100) * turnover 
    total_tran_charge = (ttc/100) * turnover 
    service_tax = (service_tax/100) * total_tran_charge 
    sebi_charges = (sebi_charges/100) * turnover 
    stamp_duty = (stamp_duty/100) * turnover 
    total_tax_and_charges = stt_total + total_tran_charge + service_tax + sebi_charges + stamp_duty 
    total_investment = buy * qty 
    current_value = sell * qty 
    net_profit = (sell * qty) - (buy * qty) - total_tax_and_charges 
    return net_profit 

#For loop that calls the expenses_calc function in a loop with the right arguments 
for key in stocks.keys(): 
    buy_price = stocks[key] 
    sell_price = get_closing(key) 
    stock_qty = qty[key] 
    expenses_func_call = expenses_calc(buy_price, sell_price, stock_qty) 
    print(sum(expenses_func_call)) 

其中类型错误发生

print(sum(expenses_func_call)) 

我试图创建一个空myresults列表,然后expenses_calc函数的返回值附加到它然后打印的列表中,总和的线,其也不起作用。

for key in stocks.keys(): 
    myresults = [] 
    buy_price = stocks[key] 
    sell_price = get_closing(key) 
    stock_qty = qty[key] 
    expenses_func_call = expenses_calc(buy_price, sell_price, stock_qty) 
    myresults.append(expenses_func_call) 
    print(sum(myresults)) 
+0

'sum'预计可迭代,'expenses_func_call'是'expenses_calc'一个呼叫的结果,和'expenses_calc'返回一个数,而不是一个可迭代。 – TigerhawkT3

+0

你是否尝试在循环之前初始化'myresults = []',而不是每次迭代?它以什么方式不起作用 - 一个错误信息?错误的输出?还有别的吗? – TigerhawkT3

回答

1

除了以前的答案,你需要一个列表传递给sum功能,所以你最初尝试纠正这个问题是正确的。但是在进入循环之前,您应该初始化myresults列表。目前,每次执行循环时,实际上都会覆盖myresults内容。

0

在一次新的尝试与附加价值,以列表myresults,打印的说法应该是外面的for循环

+0

我试过了,它只是打印最后一个键的返回值而没有使用总和 – Dana

+0

看看zee的建议。您必须在循环外部初始化列表myresults。目前它在for循环的每次迭代中都被覆盖。 – Vaishali