Python新手和不支持的操作数

时间:2015-01-30 04:54:32

标签: python

我正在学习python,我正在尝试制作计算贷款利率的计划。我一直得到*:'function'和'int'不支持的操作数类型。参考第14和第8行。我不确定我做错了什么。这是代码:

from sys import argv

def payment(amt, rate, yrs) :
    def p(yrs) :
        return 12 * yrs
    def r(rate) :
        return rate / 100 / 12
    return (r * amt) / (1 - ((1 + r) ** (-p)))

if __name__ == "__main__" :
    amt = int(argv[1])
    rate = float(argv[2])
    yrs = int(argv[3])
    print("$%.2f" % payment(amt, rate, yrs))

3 个答案:

答案 0 :(得分:5)

正如评论中所提到的,你的直接问题是(正如你的例外所说)你试图将一个整数与一个函数相乘,这没有意义。根据穆罕默德的回答,一个天真的解决办法是调用你定义的函数:

return (r(rate) * amt) / (1 - ((1 + r(rate)) ** (-p(yrs))))

但是,您根本不需要这些功能。您payment()函数的更简单版本可能如下所示:

def payment(amt, rate, yrs) :
    p = 12 * yrs
    r = rate / 100 / 12
    return (r * amt) / (1 - ((1 + r) ** (-p)))

请注意,我们不是在payment()中定义函数,而是在每种情况下简单地将计算结果分配给变量。

答案 1 :(得分:4)

from sys import argv

def payment(amt, rate, yrs) :
    def p(yrs) :
        return 12 * yrs
    def r(rate) :
        return rate / 100 / 12
    return (r(rate) * amt) / (1 - ((1 + r(rate)) ** (-p(yrs))))

if __name__ == "__main__" :
    amt = int(argv[1])
    rate = float(argv[2])
    yrs = int(argv[3])
    print("$%.2f" % payment(amt, rate, yrs))

在第8行,您应该将参数传递给函数:

r(rate)
p(yrs)

答案 2 :(得分:0)

当您引用一个函数时,您将其命名为括号。但是,在您的情况下,您正在尝试使用该函数,因此您必须使用括号(在您的情况下为变量)来调用它。

以下是您编辑的代码:

from sys import argv

def payment(amt, rate, yrs) :
    def p(yrs) :
        return 12 * yrs
    def r(rate) :
        return rate / 100 / 12
    return (r(rate) * amt) / (1 - ((1 + r(rate)) ** (-(p(yrs)))))

if __name__ == "__main__" :
    amt = int(argv[1])
    rate = float(argv[2])
    yrs = int(argv[3])
    print("$%.2f" % payment(amt, r(rate), p(yrs)))