# 第42期-猴子分桃
Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。
# 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)
2
3
4
5
6
7
8
9
10
11
第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则报错
两者配合效果会意想不到,后面咱们会经常遇到
# 4 视频解析
高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码