Python 3.x 理解while循环中的变量和函数

Python 3.x 理解while循环中的变量和函数,python-3.x,function,variables,while-loop,Python 3.x,Function,Variables,While Loop,我有一个函数塔尔使用的while循环是这样的 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_s

我有一个函数塔尔使用的while循环是这样的

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
def fun\u rightamount(月薪、首付、半年加薪、r、error=False):
ε=100
num_猜测=0
低=0
高=100
保存的部分=(高+低)/2.0
而abs(三十六分之五(储蓄部分、月工资、首付、半年加薪、r)-首付)>=ε:
如果fun\u三十六(已存部分、月工资、首付、半年加薪、r)<首付:
低=已保存的部分
其他:
高=已保存的部分
保存的部分=(高+低)/2.0
num_猜测+=1
如果保存的部分>99.9999:
打印('attenzione ERRORE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
error=True
打破
返回保存的部分、猜测的数量、错误
我可以使用另一个函数“pippo”更改while station

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
def pippo(已存部分、月工资、首付、半年加薪、r):
yy=(三十六分之一(储蓄部分、月工资、首付、半年加薪、r)-首付)
返回yy
def fun_rightamount(月薪、首付、半年加薪、r、errore=False):
ε=100
num_猜测=0
低=0
高=100
保存的部分=(高+低)/2.0
而abs(pippo(储蓄部分、月工资、首付、半年加薪、r))>=epsilon:#
如果pippo(部分储蓄、月薪、首付、半年加薪、r)<0:
低=已保存的部分#
其他:
高=已保存的部分
保存的部分=(高+低)/2.0
num_猜测+=1
如果保存的部分>99.9999:
打印('attenzione ERRORE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
error=True
打破
返回保存的部分、猜测的数量、错误
一切都按预期进行,两种结构的工作原理完全相同,但如果我尝试在while语句中使用变量(“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
    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
def fun\u rightamount(月薪、首付、半年加薪、r、error=False):
ε=100
num_猜测=0
低=0
高=100
保存的部分=(高+低)/2.0
yy=(三十六分之一(储蓄部分、月工资、首付、半年加薪、r)-首付)
当abs(yy)>=epsilon时:#
如果yy<0:
低=已保存的部分
其他:
高=已保存的部分
保存的部分=(高+低)/2.0
num_猜测+=1
如果保存的部分>99.9999:
打印('attenzione ERRORE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
error=True
打破
返回保存的部分、猜测的数量、错误

while循环,循环但num_猜测incraeses,abs(yy)值不变,保存的部分保持为“0”,而至少在第一个循环中应为“50”。有什么想法吗?

绿色斗篷的家伙回答了我的问题


yy在分配时设置一次,然后再也不会更改。即使保存的部分会更改,您也需要再次运行该函数并将其再次分配给yy。在前面的示例中,您在每次迭代时都调用该函数,因此它会正确终止–Green Clope Guy 4月29日19:07

yy
在分配它时设置一次,然后从不更改。即使保存的
部分将发生更改,您也需要再次运行该函数并将其再次分配给
yy
。在前面的示例中,每次迭代都调用该函数,因此它会正确终止