2017-01-28 21 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:代入前にローカル変数' lower 'が参照されています'

+0

'lower'はグローバルベター –

+3

使用 'はGlobal'のスコープではありません:あなたは'はGlobal'を必要としないようにプログラムを書き換えます。 – Li357

+0

変数のアイデアを使用するためにはPythonを伝えるために' findMin' – Matthias

答えて

0

lowerupperに変更するには、機能の冒頭にglobalを追加する必要があります。

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) 
関連する問題