私は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'
どんな洞察も本当にありがたいです。ありがとうございました。
関数を呼び出すには、関数名と必要なパラメーターの後に親を追加する必要があります。
これらの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)))
問題はこの行にあると思いますminMonPay = minimumMonthlyPayment
メソッドを呼び出すのではなく、メソッドに変数を割り当てているように見えます。
コードを見ると、関数を変数に割り当ててから、値から関数を減算しようとしているように見えます。
関数 'minimumMonthlyPayment(previousbalance)'を定義しますが、次に関数を変数 'minMonPay = minimumMonthlyPayment'に割り当てます。その後、previousBalance-minMonPayと言います。あなたがやろうとしていたことは次のとおりです。
minMonPay = minimumMonthlyPayment(previousbalance)
お役に立てば幸いです。