2012-10-16 8 views
6

私はPythonの初心者であり、割り当て作業中です。エラーを調査し、推奨される修正を適用した後でも、私はTypeError: unsupported operand type(s) for -: 'int' and 'function'を得続けます。私は解決策を手渡す人は探していませんが、私はもう一度見ていただければ幸いです。私は何かが欠けているが、私は何が分からない。これは私がとのトラブルを抱えているコードのセクションです:Python TypeError: - : 'int'と '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' 

私は任意の洞察力を本当に感謝します。ありがとうございました。

答えて

5

関数を呼び出すには、関数名の後に括弧と必要なパラメータを追加する必要があります。この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))) 
+0

私は、いつメソッドを使うべきかをしっかりと把握していないと思います。私はあなたの提案を取り出して削除しましたが、今は入力を求めていません。私はすべての古いコーディングを削除していない、ただそれを今すぐコメントした。これは私が持っているものです: – KMarciszewski

+1

@KMarciszewskiはもう1つを追加しました。新しい問題が発生した場合は、エラーメッセージ –

+0

を投稿してください。現在、エラーは発生していません。私は全く何も得ていない。それは入力や何かを求めていません。 – KMarciszewski

0

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

+0

ご協力いただきありがとうございます。 eakronが述べているように、私の問題は解決されました。しかし、今私は新しいものを持っています。私はこの記事の最後の質問が1つあります。私は確かな基礎を得るのを助けるために読むかもしれない良いPythonの本をお勧めしますか?再度、感謝します。 – KMarciszewski

+0

@KMarciszewski [難解な方法](http://learnpythonthehardway.org/)は、おそらくあなたが得ることができる最高の無料の本です。チェック記号をクリックして回答を受け入れることを忘れないでください。 –

0

あなたのコードを見ると、変数に関数を割り当ててから、値から関数をマイナスしようとしているようです。

関数 'minimumMonthlyPayment(priorbalance)'を定義しますが、その関数を変数 'minMonPay = minimumMonthlyPayment'に割り当てます。そして、後であなたは前のBalance - minMonPayと言っています。私はあなたがするものだったと思う何:

minMonPay = minimumMonthlyPayment(previousbalance)

希望に役立つこと。

関連する問題