第一节:while循环 | 编程农场 | 谁是农场主?谁是无人机?谁是程序员?

视频文稿

打开《编程农场》我们发现农场主给了新的任务:让无人机持续有效地工作;

但我们的操作空间受到限制,只能用三个指定的内置函数和一个Python语句,一个值;

三个内置函数,harvest()执行割草;do_a_flip()执行翻跟头;pet_the_piggy()执行摸猪头;

值为布尔值,语句为while循环语句。

我们回顾下残缺的记忆,布尔值,只有两个取值:True 表示条件成立,False 表示条件不成立。while 是 Python 的一个循环语句,语法是 while 条件:,冒号后面缩进的代码块就是循环体。执行时,先判断条件是否为 True,若为 True,执行循环体;循环体执行完毕后会回到条件再次判断,直到条件变为 False 才结束循环。

任务是让让无人机持续工作,只需要把割草函数作为循环体,条件定死为true即可。

执行命令,无人机持续割草。

然而农场主却不满意,他要的是让无人机持续有效的工作,无人机现在虽然持续割草,但这是由于当下的无人机速度慢,等到他给无人机升级了速度,这段程序就会导致割到未成熟的草,无法产生收益。

仔细观察,发现草的确有生长过程,生长时间为0.5秒,而割草命令是立即执行。但目前这个程序,割到的草都是成熟草呀,是不是如农场主所说是因为无人机速度现在还比较慢的原因?

那怎么修改程序呢?

细心的我们发现,翻跟头函数和摸猪头函数的执行时间都为1秒,如果在割草函数下增加一个翻跟头函数或摸猪头函数让程序延迟1秒执行割草,是不是就解决了呢。 执行命令,无人机割草一次后,继续执行翻跟头或摸猪头指令,再进入下一次割草循环,这样每一次割草都能割到成熟的草。

然而农场主还是不满意,他认为翻跟头或摸猪头等待的时间太长了,比草的生长时间多了0.5秒,割草效率并不高。

农场主说得没错,可现有能用的函数,执行时间都是1秒啊,要怎么办呢?

细心的我们又发现,割草函数还有一个属性,如果移除了一个实体,则返回True,否则返回false。根据刚才对草的发现,我们知道只有当草生长成熟后收割才计算一个收益,也就说收割成熟的草才算移除一个实体。

割到草 → True;没割到 → False。

听起来,这正好可以拿来当循环的条件值。如果把while循环的条件值用harvest函数代替,那么程序只有判断条件为true,也就是割到成熟的草后才会进入循环体,此时只要循环体还是割草函数,那是不是就能无缝衔接割到成熟的草呢?

想到就做,修改程序,执行!

发现无人机确实每次都在草生长成熟之后割草,但这和刚开始的条件值定死为true的程序有什么不同吗?

我们没有升级后的无人机,无法验证,只好心虚的把它拿给农场主交差。

农场主没有满意也没有不满,只是问我们,如果决定把这个程序作为最终成品提交,他会出钱升级无人机的速度,以此来验证我们的程序,验证成功给我们正常发工资,但要是验证失败,我们需要支付他升级无人机的费用。

我们一时无法决定,大家觉得这个程序能满足条件吗?

视频

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容