老虎豆不逗 2025-05-06 13:46 采纳率: 100%
浏览 8
已结题

Python学习之循环代码问题求解

求抽空帮忙看看为什么这段代码只能循环两次

b=0.01
B=1.0
while B<37.78:
    print(b,B)
    b+=0.001
    for i in range(365):
        if i%7 in [6,0]:
            B*=0.99
        else:
            B*=1+b
print('工作日的努力参数是: {:.3f}'.format(b))

这是我的运行结果

0.01 1.0
0.011 5.984059269881169
工作日的努力参数是: 0.012

这是改成函数形式后的代码

def DAYUP(bx):
    B=1
    for i in range(365):
        if i%7 in [6,0]:
            B*=0.99
        else:
            B*=1+bx
    return B

b=0.01
while DAYUP(b) <37.78:
    print(b,DAYUP(b))
    b+=0.001

print('工作日赶超计划努力因数:{:.3f}'.format(b))

令我比较困惑的是,改成函数形式后就正常了,结果如下:

0.01 4.626500529730141
0.011 5.984059269881169
0.012 7.73799925773407
0.013000000000000001 10.003482723230508
0.014000000000000002 12.928964174407406
0.015000000000000003 16.705766909887725
0.016000000000000004 21.580400446248152
0.017000000000000005 27.870399412247206
0.018000000000000006 35.98468562880759
工作日赶超计划努力因数:0.019

请问这是怎么回事?

  • 写回答

3条回答 默认 最新

  • a5156520 2025-05-06 14:32
    关注

    第一份代码和第二份代码的主要区别是,变量B没有放到for循环前面进行重新赋值,所以可以试试将变量B的赋值放到for循环前面一行。

    修改如下:

    b=0.01
    B=1.0
    while B<37.78:
        
        print(b,B)
        b+=0.001
        # 第一份代码和第二份代码,主要的区别在于变量B没有在for循环前面重新赋值为1
        # 此处增加赋值即可
        B=1.0 
        for i in range(365):
            if i%7 in [6,0]:
                B*=0.99
            else:
                B*=1+b
    print('工作日的努力参数是: {:.3f}'.format(b))
    
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 5月6日