【问题标题】:Python TypeError: unsupported operand type(s) for -: 'int' and 'function'Python TypeError:-:'int'和'function'不支持的操作数类型
【发布时间】:2012-10-07 01:24:14
【问题描述】:

我是 Python 的初学者,正在完成一项任务。即使在研究了错误并应用了建议的修复程序之后,我仍然不断收到TypeError: unsupported operand type(s) for -: 'int' and 'function'。我不是在寻找任何人给我一个解决方案,但我会很感激再看一眼。我错过了一些东西,但我不知道是什么。这是我遇到问题的代码部分:

month = 0
interestYDT = 0
balance = int(raw_input ("Enter balance on credit card: "))
annualInterestRate = float(raw_input ("Enter annual interest rate as a decimal: "))
monthlyPaymentRate = float(raw_input ("Enter minimum monthly payment rate as a decimal: "))
previousbalance = balance
#
def monthlyInterestRate(annualInterestRate):
    return float(annualInterestRate/12)
#
if month <= 12:
    def minimumMonthlyPayment(previousbalance):
        return (previousbalance * monthlyPaymentRate)
    def monthlyInterest(monthlyInterestRate):
        return (1 + monthlyInterestRate)
    minMonPay = minimumMonthlyPayment
    monInt = monthlyInterest
    newbalance = ((previousbalance - minMonPay) * (monInt))
    interestYDT = (interestYTD + montInt)
    previousbalance = (newbalance)
    print ''
    print ('Month:' (month))
    print ('Minimum monthly payment: $ ' (round(minimumMonthlyPayment, 2)))
    print ('Remainging balance: $ ' (round(newbalance, 2)))
    print ' '
    month = (month + 1)

这是我得到的全部错误:

Traceback (most recent call last):
  File "C:/Users/Karla/Documents/_MIT 600X Introduction to CS and Prog/Assignments/Week2/kmarciszewski_week2_Problemset_Problem1.py", line 33, in <module>
    newbalance = ((previousbalance - minMonPay) * (monInt))
TypeError: unsupported operand type(s) for -: 'int' and 'function'

我真的很感激任何见解。谢谢。

【问题讨论】:

    标签: python typeerror


    【解决方案1】:

    为了调用一个函数,你必须在函数名之后加上括号,以及任何必需的参数。

    这两行

    minMonPay = minimumMonthlyPayment
    monInt = monthlyInterest
    

    您将函数分配给名称 minMonPay、monInt,但实际上并未调用它们。相反,您需要编写如下内容:

    minMonPay = minimumMonthlyPayment(previousBalance)
    monInt = monthlyInterest(monthlyInterestRate)
    

    这个定义

    def minimumMonthlyPayment(previousbalance):
        return (previousbalance * monthlyPaymentRate)
    

    给你一个函数,它接受一个参数并将其称为previousBalance。它与您之前在代码中创建的变量无关。其实我建议你重命名它,它只会让你作为初学者感到困惑。

    此外,您创建的函数非常简单,每个函数只使用一次,您可能会感兴趣,删除它们并内联代码。

    # OLD CODE
    def minimumMonthlyPayment(previousbalance):
        return (previousbalance * monthlyPaymentRate)
    def monthlyInterest(monthlyInterestRate):
        return (1 + monthlyInterestRate)
    minMonPay = minimumMonthlyPayment
    monInt = monthlyInterest
    
    # NEW CODE
    minMonPay = previousbalance * monthlyPaymentRate
    monInt = 1 + monthlyInterestRate
    

    如果您这样做,请不要忘记更新错误使用 minimumMonthlyPayment 函数的行。

    # OLD CODE
    print ('Minimum monthly payment: $ ' (round(minimumMonthlyPayment, 2)))
    
    # NEW CODE
    print ('Minimum monthly payment: $ ' (round(minMonPay, 2)))
    

    【讨论】:

    • 我想我对何时使用方法没有把握。我接受了您的建议并删除了它们,但现在它不要求任何输入。我还没有删除所有旧代码,只是暂时将其注释掉。这就是我所拥有的:
    • @KMarciszewski 又添加了一件事。如果您遇到新问题,请发布错误消息
    • 目前我没有收到任何错误。我什么也得不到。它不要求输入或其他任何内容。
    • @KMarciszewski 我怀疑你遇到的问题已经解决了,所以这个问题得到了回答。你现在有一个新问题,在代码的其他地方。
    【解决方案2】:

    查看您的代码,您似乎正在将一个函数分配给一个变量,然后尝试从一个值中减去一个函数。

    您定义了函数“minimumMonthlyPayment(previousbalance)”,然后将该函数分配给变量“minMonPay = minimumMonthlyPayment”。然后稍后你说previousBalance - minMonPay。我认为你的意思是:

    minMonPay = minimumMonthlyPayment(previousbalance)

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我认为问题在于这一行 minMonPay = minimumMonthlyPayment 在我看来,您是在将变量分配给方法而不是调用该方法。

      【讨论】:

      • 感谢大家的帮助。正如 eakron 所说,我的问题已经解决了。但现在我有了一个新的。我对这篇文章有最后一个问题,你能推荐一些我可以阅读的好 Python 书籍来帮助我打下坚实的基础吗?再次感谢。
      • @KMarciszewski Learn Python The Hard Way 很可能是您可以获得的最好的免费书籍。不要忘记点击复选标志接受答案。
      猜你喜欢
      • 2016-03-19
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-22
      相关资源
      最近更新 更多