1 问题描述
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
用python解决这个数学难题吧!
2 解题思路
- 第一步: 五次相同的动作,for循环
- 第二步: 由于不确定最后的桃子数量,所以需要使用while循环来尝试,直到满足条件为止
3 解题方法
n = 1 while True: try: b = n for i in range(5): assert (b - 1) % 5 == 0 b = (b - 1) / 5 * 4 break except: n += 1 print(n)View Code
第1行: 定义初始桃子数量为n并赋值为1
第2行: 从n=1开始尝试,无限循环知道满足条件
第3、9-10行: 使用try、except语句,若满足条件则结束循环,不满足条件则报错并让n+1进行下次循环
第4行: 定义变量b并将n的值赋值给b,这样可以不改变原本n的值
第5行: for循环遍历五次
第6行: assert函数判断丢掉一个桃子后剩下的桃子是否可以被平分,是则继续下一步,否则报错进入except语句
第7行: 给b赋值拿走五分之一桃子后剩余的桃子数量
第8行: 五次循环过后表示这个数符合题意,结束循环
第11行: 打印桃子数量
代码运行结果为:
小思考
这里用到了for、except语句与assert函数结合的方式,简单讲解一下:
for、except语句在第四十期已经讲解过,try里面的内容如果报错,就会停止运行进入except后面的语句中
而assert函数会判断后面语句是否为True,若为False则报错
两者配合效果会意想不到,后面咱们会经常遇到