【问题标题】:I get an error - and i'm correct with my punctuations我收到一个错误 - 我的标点符号是正确的
【发布时间】:2017-05-11 12:28:36
【问题描述】:
## 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)

第一次运行,但第二次出现上述错误 我不明白为什么,请任何人帮忙!

【问题讨论】:

  • rem_pay = rem_pay(prin, an_i, dur, _yr) 行中,您将用浮点数覆盖rem_pay 函数定义。不要为函数和变量使用相同的名称。

标签: python typeerror callable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    第一次运行函数时,您将浮点结果分配给变量rem_pay

    它恰好是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已更改为payment_remainder

    【讨论】:

    • 我完全不明白。变量 rem_pay 和函数 rem_pay() 可以以某种方式相互交互吗? python不允许你单独使用它们吗?
    • 还有“它只是发生了,所以 rem_pay 是您正在执行的函数的名称,以便获得浮动结果。”~ Mike 请再解释一下。
    • @VibinNarayanan 当您定义一个名为rem_pay 的函数时,该函数本身与任何其他对象一样存储在该变量中。当您为其分配一个浮点值时,您将用一个新值覆盖以前存储的函数,因此“删除”函数对象。
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多