2016-12-27 1 views
-1
## Loan problem 

def mon_pay(prin, an_i, dur) : 
    n = dur * 12 
    r = (an_i/100)/12 
    numerator = r*(1+r)**n 
    dinominator = (1+r)**n - 1 
    if an_i == 0 : 
     mon_pay = prin/n 
    else : 
     mon_pay = prin * (numerator/dinominator) 
    return mon_pay 

def rem_pay(prin, an_i, dur, num_pay) : 
    n = (dur * 12) 
    r = (an_i/100)/12 
    numerator = ((1+r)**n - (1+r)**num_pay) 
    dinominator = ((1+r)**n - 1) 
    if an_i == 0 : 
     rem_pay = (prin * (1-num_pay/n)) 
    else : 
     rem_pay = (prin * (numerator/dinominator)) 
    return rem_pay 

prin = float (input ("Enter the Principal of loan: ")) 
an_i = float (input ("Enter the annual interest rate: ")) 
dur = int (input ("Enter the duration of loan: ")) 
mon_pay = mon_pay(prin, an_i, dur) 
print("LOAN AMOUNT:",prin,"INTEREST RATE(PERCENT):",an_i) 
print("DURATION(YEARS):",dur,"MONTHLY PAYMENT:",int(mon_pay)) 

for yr in range (1, dur+1) : 
    total_pay = mon_pay*12*yr 
    _yr = yr*12 
    rem_pay = rem_pay(prin, an_i, dur, _yr) 
    print("YEAR:",yr,"BALANCE:",rem_pay//1,"TOTAL PAYMENT",total_pay//1) 

私は上記のコードを与えました、ローンの詳細を計算するのは簡単な問題です(私はちょうどPythonを勉強しており、これは割り当てです)。私は間違いがあります - 私は句読点で正しいです

rem_pay = rem_pay(prin, an_i, dur, _yr) 

が最初に実行さ

Enter the Principal of loan: 1000 
Enter the annual interest rate: 10 
Enter the duration of loan: 5 
LOAN AMOUNT: 1000.0 INTEREST RATE(PERCENT): 10.0 
DURATION(YEARS): 5 MONTHLY PAYMENT: 21 
YEAR: 1 BALANCE: 837.0 TOTAL PAYMENT 254.0 
Traceback (most recent call last): 
    File "C:/Python34/Zsample9(loan_prob).py", line 35, in <module> 
    rem_pay = rem_pay(prin, an_i, dur, _yr) 
TypeError: 'float' object is not callable 

機能が、二回目は、それは誰が助けてください、なぜ、私が見ることができない説明したエラー を与える:私はそれを実行したとき、私はこれを取得します!

+0

'rem_pay = rem_pay(prin、an_i、dur、_yr)'行では、 'rem_pay'関数定義をfloatで上書きしています。関数と変数に同じ名前を使用しないでください。 –

答えて

2

変数と機能に同じ名前を使用しないでください。

この場合、rem_payは、関数とfloat変数の両方として使用されます。

1

初めて関数を実行するときにfloatの結果を変数rem_payに代入しています。

ちょうど、rem_payは、浮動小数点結果を得るために実行している関数の名前です。あなたは、変数

payment_remainder = rem_pay(prin, an_i, dur, _yr) 
print("YEAR:",yr,"BALANCE:",payment_remainder //1,"TOTAL PAYMENT",total_pay//1) 

名前を置き換えることを検討すべきである

ので、代わりの機能rem_payにフロート結果を割り当て、 お知らせrem_paypayment_remainderに変更されました。

+0

完全に分かりません。変数rem_payと関数rem_pay()はお互いにやり取りできますか? Pythonはそれらをseperatly使用することを許可していませんか? –

+0

また、「そして、ちょうど、rem_payが浮動結果を得るために実行している関数の名前です。」〜Mikeがもう少し説明します。 –

+0

@VibinNarayanan 'rem_pay'という関数を定義すると、その関数自体は他のオブジェクトと同じように変数に格納されます。浮動小数点値を代入すると、以前に格納された関数を新しい値で上書きし、関数オブジェクトを '削除'します。 –

関連する問題