2016-10-25 5 views
-1

В следующем примере, я получаю сообщение об ошибкеIF условие Python «локальная переменная„monthlyPayment“ссылка Перед назначением»

“local variable 'monthlyPayment' referenced before assignment” 

Ниже мой код

def getMonthlyPayment(self, annualInterestRate, loanAmount, numberOfYears, loan): 

    if loan == 0 and (annualInterestRate * 1 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 1 - loanAmount), 10) 
     return monthlyPayment 
    elif loan == 1 and (annualInterestRate * 2 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 2 - loanAmount), 20) 
     return monthlyPayment 
    elif loan > 1 and (annualInterestRate * 4 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 4 - loanAmount), 20) 
     return monthlyPayment 
    else: 
     monthlyPayment = 'Not Qualify' 
     return monthlyPayment 
+1

Ваш код не отформатирован –

+0

Также удалите все 'вернуть monthlyPayment' за исключением последнего один –

+0

я сделал это раньше, и все сценарии возвращается только «Не Квалифицируйтесь» – LEEEE

ответ

0

Правильная структура множественного еще, если заявления является

if (condition): 
    monthlypayment = something 
elif (condition2): 
    monthlypayment = something2 
elif (condition3): 
    monthlypayment = something3 
else: 
    monthlypayment = something4 

Так что с вашей, если заявление в правильном формате, monthlypayment будет присваивает значение только один раз. Per @ анонимный комментарий выше, вы можете закончить эту функцию с помощью return monthlypayment

Предполагая, что эта функция является частью определения класса, вам нужно самостоятельно или декоратор @staticmethod. Если вы пишете не-объектно-ориентированный код, вы можете отказаться от себя.

def getMonthlyPayment(self,annualInterestRate,loanAmount,numberOfYears,loan): 
    if loan == 0 and (annualInterestRate * 1 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 1 - loanAmount), 10) 
    elif loan == 1 and (annualInterestRate * 2 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 2 - loanAmount), 20) 
    elif loan > 1 and (annualInterestRate * 4 - loanAmount) >= 2 and numberOfYears <= 3: 
     monthlyPayment = min((annualInterestRate * 4 - loanAmount), 20) 
    else: 
     monthlyPayment='Not Qualify' 
    return monthlyPayment 
0

Ваш код не правильно отформатированный , Также нет необходимости в нескольких return. Удалите все возвращенные данные, кроме последнего.

Кроме того, вы не используете self в любом месте функции, используйте @staticmethod декоратор с функцией класса.

Ниже приведен код, предполагая, что все ваши логика верна:

@staticmethod 
def getMonthlyPayment(annualInterestRate,loanAmount,numberOfYears,loan): 
    if loan ==0 and (annualInterestRate*1-loanAmount)>=2 and numberOfYears<=3: 
     monthlyPayment = min((annualInterestRate * 1 -loanAmount),10) 
    elif loan ==1 and (annualInterestRate*2-loanAmount)>=2 and numberOfYears<=3: 
     monthlyPayment = min((annualInterestRate * 2-loanAmount),20) 
    elif loan >1 and (annualInterestRate*4-loanAmount)>=2 and numberOfYears<=3: 
     monthlyPayment = min((annualInterestRate * 4 -loanAmount),20) 
    else: 
     monthlyPayment='Not Qualify' 
    return monthlyPayment 
Смежные вопросы