当Python遇上中国古典数学……

当Python遇上中国古典数学……_第1张图片

来源 | 异步 |

“科学艺术本相通,科技人文可相融”。

人工智能的实现却离不开各种算法,而说到算法,虽然人们各种各样的需求在增加,算法的发展迅速,但万物万变不离其宗。

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

很早以前我们的祖宗就开始研究算法了。这里不得不就提到我国古代第一部数学专著《九章算术》,是《算经十书》中最重要的一部,内容十分丰富,据初步考证,《九章》大约成书于东汉初期,汇总了中国先秦至汉代的数学成就。

当Python遇上中国古典数学……_第2张图片

《九章算术》中的“术”可对应计算机科学中的“算法”,一本《九章算术》也就是一本解决实际问题的算法集。

我们来看看取自《九章算术》的里田术。

问题一今有田广一里,从一里。问为田几何?

答曰:三顷七十五亩。

问题二又有田广二里,从三里。问为田几何?

答曰:二十二顷五十亩

什么意思呢?

简单翻译一下就是

问题一,有一块方形田地,长为1里,宽为1里,其面积是多少?

答:3顷75亩。

问题二,又有方形田地,其长为2里,宽为3里,其面积是多少?

答:22顷55亩。

当Python遇上中国古典数学……_第3张图片

古人的思想,其实和我们现代科技又是相通的,在计算机上,我们可以再现古人之思。

比如这段话,也可以用我们设计优雅、明确、简单的编程语言Python来翻译。

Python函数翻译里田术

1、自定义函数

我们可以把里田术定义成自己的一个函数。函数定义包括函数的名字以及函数被调用时运行的语句序列集。下面是这个函数的源码,如图所示。

当Python遇上中国古典数学……_第4张图片

函数的第一行叫做header(头),其余部分叫做body(体)。header以一个冒号结束,body可以包含任意数量的语句。body里的所有语句必须缩进,缩进可以选择两个空格、4个空格或一个tab,无论选择哪一种,body中每一条语句的缩进必须一致、必须对齐。

函数的命名规则和变量命名规则一样:字母、数字、下划线是合法的,但第1个字符不能是数字。你不可以用关键字作为函数名,也应尽量避免函数名和已有的变量名同名。

提示

关键字是编程语言里事先定义的、有特别意义的标识符,例如:def是一个关键字,表示这是一个函数定义;return也是一个关键字,表示返回函数结果。

2、注释

一个程序是用代码这种形式语言编写的,很密集,只看一部分代码,经常很难弄明白这部分代码是做什么的,以及为什么要这么做。

程序越大越复杂,阅读理解就会越困难。所以,在程序中必须增加注释,注释采用自然语言对程序的功能进行描述。注释以#标志开始,Python解释器会将注释标示为红色,会忽略从#到行尾的文本(这部分文本Python解释器不会执行)。

3、程序剖析

程序第一部分为两条赋值语句,一句赋值ji_li(积里),一句赋值mu_shu(亩数)。第二部分是亩数转换,第三部分连接字符串返回结果。

1.赋值语句

ji_li=guang*cong#广从里数相乘得积里mu_shu=375*ji_li#以三百七十五乘之,即亩数

第一条赋值语句将传入的参数guang、cong相乘的结果赋值于变量ji_li。

第二条赋值语句将ji_li与375相乘的结果赋值于变量mu_shu。

2.亩数转换

#1顷=100亩,亩数转换成顷和亩qing=int(mu_shu/100)mu=mu_shu%100

mu_shu/100是将亩数转换成顷,结果是一个浮点数,如375/100→3.75;int(mu_shu/100)调用了int()函数,将mu_shu/100的结果截取成整数,如int(3.75)→3,即顷的整数部分。

mu_shu%100是取模运算,%是一种算术运算符,用于取除法运算的余数,例如:375%100→75(即375÷100商为3余75,这个余数75就是%运算的结果),也即亩数转换成顷后剩余的亩。

所以,上面两句代码的含义如下。

亩数(mu_shu)若为375,顷(qing)=3,亩(mu)=75,

也就是:375亩 = 3顷75亩

3.字符串连接

#连接成字符串并返回结果jie_guo=str(qing)+'顷'+str(mu)+'亩'returnjie_guo

这里的“+”是“字符串连接”运算符,用于把字符串连接起来。表达式str(qing) + '顷' +str(mu) + '亩'求值为一个新的字符串,这个新的字符串连接了4个字符串里的文本:str(qing)、'顷' 、str(mu) 、'亩'。其中str(qing)、str(mu)调用了str()函数,将整数qing、mu转换成了字符串。

“+”运算符要么是加法算术运算符,要么是字符串连接运算符。它所连接的值要么都是整数或浮点数,要么都是字符串,不能又有整数、浮点数,又有字符串。表达式str(qing) + '顷' + str(mu)+ '亩',如果写成qing+'顷' + mu + '亩',就会出错。因为qing、mu是整数,而'顷'和 '亩'是字符串,整数和字符串之间不能进行“+”运算符操作。

赋值语句jie_guo = str(qing) + '顷' + str(mu) + '亩',把连接成的新的字符串赋值给了变量jie_guo。

return jie_guo 将jie_guo作为函数li_tian_shu的返回值返回

4、运行结果

在IDLE中输入这个函数,最后输入一个空行结束。完成这个函数定义后,我们可以调用它来解决里田术问题一、问题二,运行结果如图所示。

当Python遇上中国古典数学……_第5张图片

li_tian_shu(1,1)解决问题一“广一里,从一里”,也就是传递给函数的参数为:guang=1、cong=1,结果为3顷75亩;

li_tian_shu(2,3)解决问题二“广二里,从三里”,也就是传递给函数的参数为:guang=2、cong=3,结果为22顷50亩;

注意

函数的body(体)缩进要对齐,否则会报错。函数定义完成后,函数中的语句序列集并不会执行。只有调用函数的时候,才会执行函数定义中的这些语句序列集。

这样用Python就解决了《九章算术》中的里田术啦!用严谨的态度在计算机上再现古人之思,在古算法的阐述中体现计算机编程之想、之美,相辅相成、相合相融。

当Python遇上中国古典数学……_第6张图片

《读九章学Python》用Python语言来表述了《九章算术》中的各种“术”、各种数学思想,将通过《九章算术》来学习Python语言、学习编程、学习算法思维。本书包括许多图解、示例和练习,帮助读者,从零开始,一步步走进计算机编程的世界,一步步走进《九章算术》数学的世界!

《读九章学Python》一书图文并茂,讲解细致,既是一本《九章算术》通俗化的普及读物,又是一本注重实践的Python编程入门教材,为计算机科学注入很多的人文气息。

购买请到“异步社区”

你可能感兴趣的:(当Python遇上中国古典数学……)