计算机二级Python嵩天老师Mooc学习笔记:天天向上的力量

今天学习了Python的数字类型及操作,虽然知识点不难,但在过程中,还是有惊喜的。

天天向上,来自于毛爷爷的名言,好好学习,天天向上。

有人提出,如果每天进步1%,一年后可以提升多少?反之如果每天退步1%,一年后会退步多少?

这个问题在数学上很简单,就是1.01的365次方和0.99的365次方。在很多企业墙上,也见过类似的公式,前者的答案是37.78,后者的答案是0.03。强烈的对比可以看出,每天持续进步的力量非常大。

用Python计算也很简单,只需要用上基础的幂运算就可以。

接着老师在这个问题基础上举一反三,升级为复杂点的问题,以便讲解更多知识点。

一年365天,如果5天的工作日,每天进步1%,2天的休息日,每天退步1%,这种工作日向上的力量如何呢?

看上去复杂一些了,没法用简单的公式去计算。事实上如果硬要找规律,总结出一个数学公式,也是可以找到的。

但老师指出,这样做就是典型的数学思维,问题的解决大部分还是靠的人脑,计算机只是最后用来辅助计算。而用计算机解决问题,可以用一种计算思维的方式,先将问题抽象,抽象出问题的形式化逻辑,再进行自动化,将抽象的结果,通过程序自动完成,就可以很快的得到结果。

按照这种思维,解决这个问题的代码如下:

dayup = 1.0
dayfactor = 0.01
for i in range(365):
    if i % 7 in [6,0]:
        dayup = dayup*(1-dayfactor)
    else:
        dayup = dayup*(1+dayfactor)
print("工作日的力量: {:.2f}".format(dayup))
其中for i in range(365):代表的是将i遍历365天,循环模拟365天这个过程。

而if i % 7 in [6,0]:代表i对7求余的时候,判断是否有余数为6和0的,如果有,显然就是休息日。余数如果不是这两个,就代表是工作日,分别计算即可。

计算的结果,工作日的力量为4.63,比起每天进步还是差了不少。

在天天向上问题进一步升级中,问题变成了有2个人,A每天进步1%,B休息日每天退步1%,问在工作日要进步到什么程度,才能赶上A的水平?

和前面提到的一样,如果用一种复杂的数学公式计算,当然也可以得到最后的答案,但不是我们利用计算机解决问题最好的方式。

计算机有一个很大的优势,就是计算能力超强,一些需要大规模计算的笨方法,在数学角度上不是最优的,但在计算机这里却非常实用。

上面的问题,就可以用不断试错的方式。给B一个进步的初始值,算出结果后和A比较,如果赶不上A,就加一点点,直到赶上A为止。

这样的计算量,如果手动去算,要算到天昏地暗,几乎是行不通的。而对于计算机来说,只要一瞬间就可以得到答案。这就是用计算机解决问题时,笨办法试错思维方式的优势。

实现的代码如下:

def dayUP(df):
    dayup = 1
    for i in range(365):
        if i % 7 in [6,0]:
            dayup = dayup*(1.0-0.01)
        else:
            dayup = dayup*(1.0+df)
    return dayup
dayfactor = 0.01
while dayUP(dayfactor)<37.78:
    dayfactor += 0.001
print("工作日的努力参数是: {:.3f}".format(dayfactor))
其中保留字def是用来定义函数,df是参数,是dayfactor的简写,也就是不断测试的B的工作日进步程度。

while是用来判断条件成立是循环执行,也就是B的最终结果不小于37.78时,才结束计算。

dayfactor += 0.001这句代码的含义,和dayfactor=dayfactor+0.001相同,只是为了代码更简洁。

最终的结果是0.019,也就是工作日每天进步1.9%,和每天进步1%的效果是一样。
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值