У меня есть функция, которая использует 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'. Есть идеи?