# 第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)
1
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行: 打印桃子数量

代码运行结果为:
image.jpg

# 小思考

这里用到了for、except语句与assert函数结合的方式,简单讲解一下:
for、except语句在第四十期已经讲解过,try里面的内容如果报错,就会停止运行进入except后面的语句中
而assert函数会判断后面语句是否为True,若为False则报错
两者配合效果会意想不到,后面咱们会经常遇到

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM