8

私は 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'

洞察をいただければ幸いです。ありがとうございました。

4

3 に答える 3

7

関数を呼び出すには、関数名と必要なパラメーターの後に括弧を追加する必要があります。

これらの2行で

minMonPay = minimumMonthlyPayment
monInt = monthlyInterest

関数をminMonPay、monIntという名前に割り当てますが、実際にはそれらを呼び出しません。むしろ、次のように書く必要があります。

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

この定義

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

1つのパラメーターを受け取り、それをpreviousBalanceと呼ぶ関数を提供します。これは、コードの前半で作成した変数とは何の関係もありません。実際、名前を変更することをお勧めします。初心者として混乱させるだけです。

さらに、作成した関数は非常に単純で、それぞれ1回だけ使用されるため、関数を削除してコードをインライン化することをお勧めします。

# 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)))
于 2012-10-16T21:05:10.323 に答える
0

コードを見ると、変数に関数を割り当ててから、値から関数を減算しようとしているように見えます。

関数'minimumMonthlyPayment(previousbalance)'を定義しますが、次に関数を変数' minMonPay=minimumMonthlyPayment'に割り当てます。その後、previousBalance-minMonPayと言います。あなたがやろうとしていたことは次のとおりです。

minMonPay = minimumMonthlyPayment(previousbalance)

お役に立てば幸いです。

于 2012-10-16T21:03:19.240 に答える
0

minMonPay = minimumMonthlyPayment問題は、メソッドを呼び出すのではなく、変数をメソッドに割り当てているように見えるこの行にあると思います。

于 2012-10-16T21:01:39.730 に答える