2017-01-28 3 views
-4
balance = float(input('Enter a starting balance: ')) 

annualInterestRate = float(input('Enter an annual interest rate: ')) 

monthlyInterestRate = float(annualInterestRate/12) 

balance2 = balance 

lower = float(balance/12) 

upper = float((balance*(1+monthlyInterestRate)**12)/12) 

epsilon = 0.01 

guess = float((lower+upper)/2) 


def findMin(balance2, guess): 

    print(lower, upper) 
    for i in range(12): 
     balance2 -= guess 
     balance2 += (balance2*monthlyInterestRate) 
    if round(balance2, 2): 
     return guess 
    elif balance2 > 1: 
     lower = guess 
    elif balance2 < 1: 
     upper = guess 
    guess = (upper+lower)/2 
    balance2 = balance 
    findMin(balance2, guess) 

findMin(balance2, guess) 

print(guess) 

Когда я запускаю код, указанный выше я получаю UnboundLocalError (он говорит, что «ниже» упоминается перед тем назначением). Я действительно смущен, потому что, как вы можете видеть, «нижнему» присваивается значение перед функцией, так почему бы не получить его из-за пределов функции? Любая помощь будет принята с благодарностью! Благодарю.«UnboundLocalError: локальная переменная„ниже“обращаться до присвоения»

+0

'lower' не в области видимости' findMin' –

+3

Используйте 'global' сказать Python использовать глобальную переменную – Li357

+0

Лучше идею: Перепишите программу так, что вам не нужно' global'. – Matthias

ответ

0

В начале функции необходимо добавить global, чтобы внести изменения в lower и upper.

balance = float(input('Enter a starting balance: ')) 

annualInterestRate = float(input('Enter an annual interest rate: ')) 

monthlyInterestRate = float(annualInterestRate/12) 

balance2 = balance 

lower = float(balance/12) 

upper = float((balance*(1+monthlyInterestRate)**12)/12) 

epsilon = 0.01 

guess = float((lower+upper)/2) 


def findMin(balance2, guess): 
    global lower, upper #Change 
    print(lower, upper) 
    for i in range(12): 
     balance2 -= guess 
     balance2 += (balance2*monthlyInterestRate) 
    if round(balance2, 2): 
     return guess 
    elif balance2 > 1: 
     lower = guess 
    elif balance2 < 1: 
     upper = guess 
    guess = (upper+lower)/2 
    balance2 = balance 
    findMin(balance2, guess) 

findMin(balance2, guess) 

print(guess) 
Смежные вопросы