2016-12-23 7 views
-1

expenses_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)) 

タイプのエラーは、私はこれはまた、空のmyresultsリストを作成し、次いでリストの合計を印刷することにexpenses_calc関数の戻り値を追加しようとしている

print(sum(expenses_func_call)) 

発生線動作しません。リストmyresultsに値を追加すると、あなたの次の試みで

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

、あなたのprint文は、前の回答に加えて、forループ

+0

私はそれを試しました、それはちょうど合計を使用せずに最後のキーの戻り値を出力します – Dana

+0

何が提案されたかを調べてください。ループの外側でリストのmyresultsを初期化する必要があります。現在、forループの各繰り返しで上書きされています。 – Vaishali

関連する問題