我得到一个错误 - 我正确与我的标点

问题描述:

## 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函数定义。不要对函数和变量使用相同的名称。 –

不要对变量和函数使用相同的名称。

在这种情况下,rem_pay被用作函数和浮点变量。

您第一次运行该功能时,将浮点结果分配给变量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'的函数时,函数本身就像任何其他对象一样存储在该变量中。当你给它赋一个浮点值时,你用一个新值覆盖以前存储的函数,因此'删除'该函数对象。 –