# 第49期-老鼠挖洞

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文这么说的:
今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思就是说,有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。
大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

《九章算术》是中国古代数学专著,承先秦数学发展的源流,进入汉朝后又经许多学者的删补才最后成书,这大约是公元一世纪的下半叶。它的出现,标志着中国古代数学体系的形成。
  后世的数学家,大都是从《九章算术》开始学习和研究数学知识的。唐宋两代都由国家明令规定为教科书。1084年由当时的北宋朝廷进行刊刻,这是世界上最早的印刷本数学书。
  《九章算术》共收有246个数学问题,分为九章。分别是:方田、栗米、衰分、少广、商功、均输、盈不足、方程、勾股。
  《九章算术》是世界上最早系统叙述了分数运算的著作;其中盈不足的算法更是一项令人惊奇的创造;“方程”章还在世界数学史上首次阐述了负数及其加减运算法则。
  《九章算术》的出现,标志着我国古代数学体系的正式确立,当中有以下的一些特点:1.是一个应用数学体系,全书表述为应用问题集的形式;2.以算法为主要内容,全书以问、答、术构成,“术”是主要需阐述的内容;3.以算筹为工具。
  《九章算术》取得了多方面的数学成就,包括:分数运算、比例问题、双设法、一些面积、体积计算、一次方程组解法、负数概念的引入及负数加减法则、开平方、开立方、一般二次方程解法等。《九章算术》的思想方法对我国古代数学产生了巨大的影响。自隋唐之际,《九章算术》已传入朝鲜、日本,现在更被译成多种文字。作者:(汉)张苍、耿寿昌、(魏)刘徽注

# 2 解题思路

  • 第一步: 重复循环,需要使用while True无限循环,到结果为10时结束循环
  • 第二步: 最后算各打多少米时需要注意

# 3 解题方法

all_big=all_small=big_mouse=small_mouse=1
x,day=10,0
while True:
    x-=(big_mouse+small_mouse)
    big_mouse*=2
    small_mouse/=2
    day+=1
    if x<=0:
        print(day)
        break
    all_big+=big_mouse
    all_small+=small_mouse
x=(10-all_big-all_small)
all_big+=x*big_mouse/(big_mouse+small_mouse)
all_small+=x*small_mouse/(big_mouse+small_mouse)
print(f'大老鼠挖了{all_big}尺,小老鼠挖了{all_small}尺')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

第1行: 定义变量all_big、all_small、big_mouse、small_mouse且都赋值为1,分别代表大老鼠总路程、小老鼠总路程、大老鼠单日路程、小老鼠单日路程
第2行: 定义变量x、day分别赋值10、0,分别代表总长度和天数
第3行: 无限循环直到遇到break结束循环
第4行: 求出总距离减去两只老鼠一起挖洞的距离剩余的距离并重新赋值给x
第5-6行: 大老鼠速度乘二,小老鼠速度减半
第7行: 记录天数
第8-10行: 如果总距离小于或等于0了,便输出天数并结束循环
第11-12行: 计算两只老鼠的总路程
第13行: 计算相遇前一天两只老鼠剩余的路程
第14-15行: 通过两只老鼠的速度计算两只老鼠在最后的路程分别挖了多远
第16行: 输出两只老鼠的总路程

代码运行结果为:
image.jpg

# 4 视频解析

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

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