Понимание переменных и функций в циклах while - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть функция, которая использует while, в то время как l oop выглядит следующим образом

def fun_rightamount(monthly_salary,down_payment,semi_annual_rise,r,errore=False):
    epsilon = 100
    num_guesses = 0 
    low = 0 
    high = 100
    portion_saved = (high + low)/2.0    
    while abs(fun_thirtysix(portion_saved,monthly_salary,down_payment,semi_annual_rise,r) - down_payment ) >= epsilon : 
        if fun_thirtysix(portion_saved,monthly_salary,down_payment,semi_annual_rise,r)  < down_payment  :             
            low = portion_saved        
        else: 
            high = portion_saved         
        portion_saved = (high + low)/2.0                
        num_guesses += 1 
        if portion_saved > 99.9999:            
            print('attenzione ERRORE !!!!!!!!!!!!!!!!!!!!!!!!!!')
            errore=True
            break    
    return portion_saved,num_guesses,errore

Я могу изменить статическое время, используя другую функцию 'pippo'

def pippo(portion_saved,monthly_salary,down_payment,semi_annual_rise,r):
    yy=(fun_thirtysix(portion_saved,monthly_salary,down_payment,semi_annual_rise,r) - down_payment) 
    return yy

def fun_rightamount(monthly_salary,down_payment,semi_annual_rise,r,errore=False):
    epsilon = 100
    num_guesses = 0 
    low = 0 
    high = 100
    portion_saved = (high + low)/2.0    
    while abs(pippo(portion_saved,monthly_salary,down_payment,semi_annual_rise,r)) >= epsilon :  #
        if pippo(portion_saved,monthly_salary,down_payment,semi_annual_rise,r)  < 0  :           #  
            low = portion_saved                                                                  #
        else: 
            high = portion_saved         
        portion_saved = (high + low)/2.0                
        num_guesses += 1 
        if portion_saved > 99.9999:            
            print('attenzione ERRORE !!!!!!!!!!!!!!!!!!!!!!!!!!')
            errore=True
            break    
    return portion_saved,num_guesses,errore

и все работает, как и ожидалось, две конструкции работают совершенно одинаково, но если я попытаюсь использовать переменную ('yy') в своем операторе while вместо функции, моя программа войдет в бесконечное число l oop:

def fun_rightamount(monthly_salary,down_payment,semi_annual_rise,r,errore=False):
    epsilon = 100
    num_guesses = 0 
    low = 0 
    high = 100
    portion_saved = (high + low)/2.0
    yy=(fun_thirtysix(portion_saved,monthly_salary,down_payment,semi_annual_rise,r) - down_payment) # 
    while abs(yy) >= epsilon :                                                                      #
        if yy  < 0  :                                                                               #     
            low = portion_saved        
        else: 
            high = portion_saved         
        portion_saved = (high + low)/2.0                
        num_guesses += 1 
        if portion_saved > 99.9999:            
            print('attenzione ERRORE !!!!!!!!!!!!!!!!!!!!!!!!!!')
            errore=True
            break    
    return portion_saved,num_guesses,errore

пока l oop, зацикливается, но num_guesses увеличивается, значения abs (yy) не меняются, а part_saved остается равным '0', в то время как по крайней мере в первом плече l oop будет '50'. Есть идеи?

...