2012-10-16 57 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

爲了調用函數,必須在函數名稱後面添加parens以及任何必需的參數。

在這兩條線

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))) 
+0

我想我沒有牢牢掌握何時使用方法。我採納了你的建議並刪除了它們,但現在不需要任何輸入。我沒有刪除所有舊的編碼,只是現在評論它。這是我的: – KMarciszewski

+1

@KMarciszewski增加了一件事。如果您遇到新問題,請發佈錯誤消息 –

+0

目前我沒有收到任何錯誤。我什麼都沒有得到。這不是要求輸入或其他任何東西。 – KMarciszewski

0

我認爲問題在於這條線minMonPay = minimumMonthlyPayment它在我看來像你是一個變量分配給一個方法,而不是調用該方法。

+0

謝謝大家的幫助。正如eakron所說,我的問題已經解決。但現在我有了一個新的。我對這篇文章有最後一個問題,你能提出一些我可能會閱讀的好的Python書籍,以幫助我獲得更堅實的基礎嗎?再次感謝。 – KMarciszewski

+0

@KMarciszewski [Learn Python The Hard Way](http://learnpythonthehardway.org/)很可能是您可以獲得的最好的免費書籍。不要忘了單擊複選標記接受答案。 –

0

看着你的代碼,它看起來像你正在給一個變量分配一個函數,然後試圖從一個值減去一個函數。

您可以定義函數'minimumMonthlyPayment(previousbalance)',但是您可以將該函數分配給變量'minMonPay = minimumMonthlyPayment'。然後稍後你說previousBalance - minMonPay。我覺得你的意思做的是:

minMonPay = minimumMonthlyPayment(previousbalance)

希望有所幫助。

相關問題