

return dayup缩进不对,然后返回的值一直是i为0时计算出的dayup值0.99,所以导致while循环死循环了;
将return dayup这一行保持和for循环一样的缩进位置,即等for循环计算完成之后再返回就可以了。
修改如下:
参考链接:
Python缩进规则(包含快捷键)
和其它程序设计语言(如 Java、C 语言)采用大括号{}分隔代码块不同,Python 采用代码缩进和冒号( : )来区分代码块之间的层次。 在 Python 中,对于类定义、函数定义、流程控制语句、
http://c.biancheng.net/view/4180.html
关于 python 的缩进_python缩进_aolixiaox的博客-CSDN博客
python使用缩进来区分不同的代码块,所以对缩进有严格要求,本文就python缩进规则,及常见的缩进问题做了一些整理。_python缩进
https://blog.csdn.net/wosind/article/details/100012180

def dayUP(df):
dayup = 1
for i in range(365):
if i%7 in [6,0]:
dayup = dayup * (1-0.01)
else :
dayup = dayup * (1+df)
# print("dayup=",dayup,",i=",i)
# http://c.biancheng.net/view/4180.html
# https://blog.csdn.net/wosind/article/details/100012180
return dayup # 这一行保持和for循环同样的缩进
dayfactor = 0.01
while dayUP(dayfactor)<37.78:
dayfactor += 0.001
print("value:{:.3f}".format(dayfactor))
