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) 

Wenn ich den Code oben laufe ich bin einen UnboundLocalError bekommen (es sagt, dass ‚untere‘ wird vor der Zuweisung referenziert). Ich bin wirklich verwirrt, weil, wie Sie sehen können, 'niedriger' einen Wert vor der Funktion zugewiesen wird, also warum wird es nicht von außerhalb der Funktion aufgenommen? Jede Hilfe würde sehr geschätzt werden! Vielen Dank.‚UnboundLocalError: lokale Variable‚untere‘vor der Zuweisung referenziert‘

+0

'lower' ist in ihrem Umfang nicht für' findMin' –

+3

Verwenden 'global' Python zu sagen, die globale Variable – Li357

+0

bessere Idee zu nutzen: das Programm neu schreiben, so dass Sie nicht' global' brauchen. – Matthias

Antwort

0

Sie müssen am Anfang der Funktion global hinzufügen, um Änderungen an lower und upper vorzunehmen.

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) 
Verwandte Themen