2012-10-16 4 views
6

저는 Python의 초보자이며 과제 작성 중입니다. 나는 오류를 연구하고 제안 된 수정을 적용한 후에도 계속 TypeError: unsupported operand type(s) for -: 'int' and 'function'을 얻고 있습니다. 나는 해결책을 건네 줄 사람을 찾고있는 것이 아니지만 두 번째를 고맙게 생각한다. 나는 무엇인가 놓치고있다. 그러나 나는 무엇이 있는지에 관해 모른다. 내가 어떤 통찰력을 정말 고맙겠Python TypeError : - 'int'및 'function'에 대해 지원되지 않는 피연산자 유형

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' 

: 이것은 내가 얻을 전체 오류입니다

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) 

: 이것은 내가에 문제가있어 코드의 섹션입니다. 고맙습니다.

답변

5

함수를 호출하려면 함수 이름 뒤에 괄호와 필수 매개 변수를 추가해야합니다. 이 두 줄

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 명시된 바와 같이, 내 문제가 해결되었습니다. 그러나 지금 나는 새로운 것을 가지고있다. 이 게시물에 대한 마지막 질문이 하나 있습니다. 파이썬 책을 읽어 보시고 제가 좀 더 탄탄한 접지를하도록 도와 주실 수 있습니까? 고마워, 또. – KMarciszewski

+0

@KMarciszewski [Python 어려운 법을 배우십시오] (http://learnpythonthehardway.org/)는 아마도 당신이 얻을 수있는 최고의 무료 책입니다. 확인 표시를 클릭하여 대답을 수락하는 것을 잊지 마십시오. –

0

코드를 살펴보면 변수에 함수를 할당 한 다음 값에서 함수를 빼내려고하는 것처럼 보입니다.

'minimumMonthlyPayment (이전 균형)'함수를 정의했지만 'minMonPay = minimumMonthlyPayment'변수에 함수를 할당합니다. 그런 다음 나중에 이전의 Balance - minMonPay라고 말하십시오. 내가 당신이해야 할 의미가 생각하는 것은이었다

minMonPay = minimumMonthlyPayment (previousbalance)

희망하는 데 도움이.

관련 문제