Python 我得到一个错误,我';I’我的标点符号正确
我已经给出了上面的代码,计算贷款细节是一个简单的问题(我只是在学习python,这是一个作业)。当我运行它时,我得到以下信息:Python 我得到一个错误,我';I’我的标点符号正确,python,typeerror,callable,Python,Typeerror,Callable,我已经给出了上面的代码,计算贷款细节是一个简单的问题(我只是在学习python,这是一个作业)。当我运行它时,我得到以下信息: ## 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 = pr
## 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)
第一次运行,但第二次运行时会出现上述错误
我不明白为什么,任何人都请帮忙 不要对变量和函数使用相同的名称
在这种情况下,
rem\u pay
同时用作函数和浮动变量。第一次运行函数时,您将浮动结果分配给变量rem\u pay
它只是发生在rem\u pay
是为了得到浮动结果而执行的函数的名称
因此,与其将浮动结果分配给函数rem\u pay
,
您应该考虑替换变量< /p>的名称。
rem_pay = rem_pay(prin, an_i, dur, _yr)
请注意,
rem\u pay
行中的payment\u restinent
已更改为rem\u pay=rem\u pay(prin,an\u i,dur,_yer)
您正在用浮点覆盖rem\u pay
函数定义。不要对函数和变量使用相同的名称。我不完全理解它。变量rem_pay和函数rem_pay()能以某种方式相互作用吗?python不允许您单独使用它们吗?而且“它只是为了得到浮点结果而执行的函数名为rem_pay。”~Mike请再解释一下。@VibinNarayanan当您定义一个名为rem_pay
的函数时,函数本身与任何其他对象一样存储在该变量中。将浮点值指定给它时,将使用新值覆盖先前存储的函数,从而“删除”函数对象。
rem_pay = rem_pay(prin, an_i, dur, _yr)
payment_remainder = rem_pay(prin, an_i, dur, _yr)
print("YEAR:",yr,"BALANCE:",payment_remainder //1,"TOTAL PAYMENT",total_pay//1)