2012-10-16 42 views
6

Tôi là người mới bắt đầu bằng Python và đang làm bài tập. Tôi tiếp tục nhận được TypeError: unsupported operand type(s) for -: 'int' and 'function' ngay cả sau khi nghiên cứu lỗi và áp dụng các bản sửa lỗi được đề xuất. Tôi không tìm ai để đưa cho tôi một giải pháp, nhưng tôi sẽ đánh giá cao một cái nhìn thứ hai. Tôi đang thiếu một cái gì đó nhưng tôi không biết những gì. Đây là phần mã Tôi đang gặp rắc rối với:Loại PythonError: loại toán hạng không được hỗ trợ (s) cho -: 'int' và '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) 

Đây là toàn bộ lỗi tôi nhận được:

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' 

Tôi thực sự muốn đánh giá cao bất cứ cái nhìn sâu sắc. Cảm ơn bạn.

Trả lời

5

Để gọi hàm, bạn phải thêm các dấu ngoặc sau tên hàm, cũng như bất kỳ tham số bắt buộc nào.

Trong hai dòng sau

minMonPay = minimumMonthlyPayment 
monInt = monthlyInterest 

bạn gán các chức năng với tên minMonPay, monInt, nhưng bạn không thực sự gọi cho họ. Thay vào đó, bạn sẽ cần phải viết một cái gì đó như:

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

Định nghĩa này

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

mang đến cho bạn một hàm mang theo một tham số và gọi đó là previousBalance. Nó không có gì để làm với biến mà bạn đã tạo trước đó trong mã của bạn. Trong thực tế, tôi đề nghị bạn đổi tên nó, nó chỉ có thể phục vụ để gây nhầm lẫn bạn như một người mới bắt đầu.

Hơn nữa, các chức năng bạn đã tạo rất đơn giản và chỉ được sử dụng một lần cho mỗi lần bạn có thể loại bỏ chúng và căn chỉnh mã.

# 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 

Đừng quên cập nhật dòng sử dụng sai chức năng MinimumMonthlyPayment nếu bạn làm điều này.

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

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

Tôi đoán tôi không nắm bắt được khi sử dụng các phương pháp.Tôi đã đề nghị của bạn và loại bỏ chúng, nhưng bây giờ nó không yêu cầu bất kỳ đầu vào. Tôi đã không gỡ bỏ tất cả các mã hóa cũ, chỉ cần nhận xét nó ra cho bây giờ. và đây là những gì tôi có: – KMarciszewski

+1

@KMarciszewski thêm một điều nữa. Nếu bạn gặp sự cố mới, vui lòng gửi thông báo lỗi –

+0

Tôi hiện không nhận được bất kỳ lỗi nào. Tôi không nhận được gì cả. Nó không yêu cầu đầu vào hay bất cứ thứ gì khác. – KMarciszewski

0

Tôi nghĩ rằng vấn đề là với dòng này minMonPay = minimumMonthlyPayment có vẻ như tôi đang gán một biến cho một phương thức thay vì gọi phương thức.

+0

Cảm ơn mọi người đã giúp đỡ của bạn. Như eakron đã nói, vấn đề của tôi đã được giải quyết. nhưng bây giờ tôi có một cái mới. Tôi có một câu hỏi cuối cùng cho bài đăng này, bạn có thể đề xuất một số sách Python tốt mà tôi có thể đọc để giúp tôi có được nền tảng vững chắc hơn không? Cảm ơn, một lần nữa. – KMarciszewski

+0

@KMarciszewski [Learn Python The Hard Way] (http://learnpythonthehardway.org/) có thể là cuốn sách miễn phí tốt nhất mà bạn có thể nhận được. Đừng quên chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm. –

0

Nhìn vào mã của bạn và có vẻ như bạn đang gán một hàm cho một biến và sau đó cố gắng trừ đi một hàm từ một giá trị.

Bạn xác định hàm 'minimumMonthlyPayment (previousbalance)', nhưng sau đó bạn gán hàm cho biến 'minMonPay = minimumMonthlyPayment'. Sau đó, bạn nói previousBalance - minMonPay. Những gì tôi nghĩ rằng bạn có nghĩa là để làm là:

minMonPay = minimumMonthlyPayment (previousbalance)

Hy vọng rằng sẽ giúp.

Các vấn đề liên quan