那么天天向上的力量到底有多大呢?就让我们来探索一下吧!
有一个很著名的说法,如果你每天进步1%,那么一年下来,你会有天翻地覆的变化;相反,如果你每天退步1%,那么你也将会有天翻地覆的退步。那么我们现在就来将这个说法用python来检验一下吧。

dayup = pow(1.01,365)
daydown = pow(0.99,365)
print("天天向上的变化:",round(dayup,2))
print("天天向下的变化:",round(daydown,2))

下面我们来看一下结果:

天天向上的变化: 37.78
天天向下的变化: 0.03

结果很令人吃惊:一年内如果你每天进步1%,那么一年下来,你将会提升37倍,相反你每天退步1%,一年下来你将会变为原来的3%。
这个数据就足以说明坚持的重要性了。

但是这个毕竟只是一个理想化的例子,很多人通常都只是会在工作日努力,周末就完全放飞自我了,那么就将这个程序稍稍做一下改变,让它更加符合普通人的日常:

effort = 0.01
start = 1
end = 1
for i in range(365):
    if i % 7 in [6,0]:
        end *= (start - effort)
    else:
        end *= (start + effort)
print("最后一年的成果:",round(end,2))

我们来看一下运行结果:

最后一年的成果: 4.63

显然,如果是在每周保持五天努力,两天退步的情况下的话,一年下来依旧还是会有些进步,会变为原来的4倍。
经过我们的改进之后,这个程序现在能够将每天的努力值随意进行改变了,这使得程序的可操作性变得更强了。
那么接下来,我们可以继续来探寻一下,如果你想要进行更加人性化的设计的话,可以再加入两种学习进度的对比。
就好比,如果我想要每天多努力一点并且周末还是想要休息,如果这样的话,每天要努力多少才可以和每天坚持进步1%一样的成绩呢?
我们可以添加一个函数,用来计算估测的努力值。

def guess(ex):
    start = 1
    end = 1
    for i in range(365):
        if i % 7 in [6,0]:
            end *= (start - 0.01)
        else:
            end *= (start + ex)
    return end
example = 0.01
while guess(example) < pow(1.01,365):
    example += 0.001
print("工作日需要每天努力",(round(example,3)*100),"%")

我在这个程序中加入了自定义的guess函数,其中guess函数内容就是之前的程序功能,并没有做过多的改动,不过在函数的最后一定要加上return(之前大一练的C语言好久没打了,一直在搞前端,生疏了)。在定义完一个函数后就用一个while循环,如果函数的输出值没有超过每天进步1%的值,那么工作日每天的进步再增加1‰,直到函数的输出值超过了每天进步1%的值。接着便输出每天要努力的值。
由此可以衍生出很多分支问题:
①工作日进步,休息日不退步保持不变,那么工作日每天需要提升多少呢?
②如果工作三天,休息一天,那么工作日需要提升多少呢?
③如果是”三天打鱼,两天晒网“呢?
下面我就进行逐一编写:
①工作日进步,休息日不退步保持不变,那么工作日每天需要提升多少呢?

def guess(ex):
    start = 1
    end = 1
    for i in range(365):
        if i % 7 in [6,0]:
            continue
        else:
            end *= (start + ex)
    return end
example = 0.01
while guess(example) < pow(1.01,365):
    example += 0.001
print("工作日需要每天努力",(round(example,3)*100),"%")

结论是:

工作日需要每天努力 1.5 %

②如果工作三天,休息一天,那么工作日需要提升多少呢?

def guess(ex):
    start = 1
    end = 1
    for i in range(365):
        if i % 4 in [0]:
            end *= (start - 0.01)
        else:
            end *= (start + ex)
    return end
example = 0.01
while guess(example) < pow(1.01,365):
    example += 0.001
print("工作日需要每天努力",(round(example,3)*100),"%")

结论:

工作日需要每天努力 1.7000000000000002 %

需要注意的是,这里虽然我保留了三维数字,但是依旧出现了很多位数字,这个不是程序的问题,而是计算机在计算的过程中由于是二进制进行计算,所以对于一些数字的转化会有误差存在。

③如果是”三天打鱼,两天晒网“呢?

def guess(ex):
    start = 1
    end = 1
    for i in range(365):
        if i % 5 in [4,0]:
            end *= (start - 0.01)
        else:
            end *= (start + ex)
    return end
example = 0.01
while guess(example) < pow(1.01,365):
    example += 0.001
print("工作日需要每天努力",(round(example,3)*100),"%")

结论:

工作日需要每天努力 2.4 %

很显然,后面几个的程序都大同小异,只是稍微对其中的内容做一下修改即可。

最后希望大家都能够好好学习,天天向上,一起早日脱离菜鸡的行列