2016-12-27 143 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,這是一個任務)。當我運行它,我得到這個:我得到一個錯誤 - 我正確與我的標點

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 

功能

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

運行第一次,但第二次就給出了提到的錯誤 我不明白爲什麼,有人請幫助!

+0

在'rem_pay = rem_pay(prin,an_i,dur,_yr)'行中,您用浮點數覆蓋了rem_pay函數定義。不要對函數和變量使用相同的名稱。 –

回答

2

不要對變量和函數使用相同的名稱。

在這種情況下,rem_pay被用作函數和浮點變量。

1

您第一次運行該功能時,將浮點結果分配給變量rem_pay

它只是發生,所以rem_pay是您正在執行的函數的名稱,以獲得浮動結果。

因此,而不是分配一個float結果的功能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已更改爲payment_remainder

+0

我完全不理解它。 rem_pay和函數rem_pay()可以相互交互嗎? python不允許你分開使用它們嗎? –

+0

而且「這只是發生,以便rem_pay是您正在執行的函數的名稱,以獲得浮動結果。」〜邁克解釋這個請多一點。 –

+0

@VibinNarayanan當你定義一個名爲'rem_pay'的函數時,函數本身就像任何其他對象一樣存儲在該變量中。當你給它賦一個浮點值時,你用一個新值覆蓋以前存儲的函數,因此'刪除'該函數對象。 –

相關問題