python编程基础:开方术python相关源码解析及运行结果|python人工智能源码
【python编程基础:开方术python相关源码解析及运行结果|python人工智能源码】lot物联网小编为你整理了的相关内容,希望能为你解答。
点击关注异步社区头条号,程序员的思想汇IT学习的集散地
随着人工智能概念的大火,其重要的支持语言Python也一路高歌猛,Python的设计哲学是“优雅、明确、简单”。
《九章算术》我国现存的最古老的数学著作之一,本专栏将通过《九章算术》带大家快速学习Python语言、学习编程、学习算法思维。
本书包括许多图解、示例和练习,帮助读者,从零开始,一步步掌握python,一步步走进《九章算术》数学的世界!
17.2 开方术.py源码
def kai_fang(ji): 批注: # 置积为实 自定义一个开方函数kai_fang,参数为ji(积) shi=ji shi:实 # 借一算,步之,超一等 jie_suan=len(str(shi))-1 jie_suan:借算,初始在“实”的末尾,即个位 bu_shu=0 bu_shu:步数,记录借算移动次数 while jie_suan >= 2: 借算向前移动,直至无法移动 jie_suan=jie_suan-2 bu_shu=bu_shu 1 l_shang=[] l_shang:商的列表 # 议所得, if bu_shu == 0: bu_shu为0,就是借算没有移动, shu=shi 实为一位或二位数,无需截取 else:shu=shi//(10**(bu_shu*2)) 截取借算定位的议商的实的数字,**:幂运算符
{!-- PGC_COLUMN --} i=1 参见说明1 while shu >= i*i: i=i 1 chu_shang=i-1 chu_shang:初商 # 以一乘所借一算为法, fa=chu_shang*1*(10**(bu_shu*2)) # 而以除。 shi=shi-chu_shang*fa if bu_shu == 0: 如果积为一位或二位数: if shi == 0: pfg = chu_shang pfg:平方根 return pfg else: return -1 else: 否则:(即积不是一位或二位数) l_shang.append(chu_shang) 将chu_shang加入商的列表l_shang # 除已,倍法为定法。其复除,折法而下 fa=int(fa*2/10) # 复置借算,步之如初。 jie_suan=jie_suan 2 借算向后退一步 bu_shu=bu_shu-1 # 以复议一乘之,,所得副以加定法,以除。 shu=shi//(10**(bu_shu*2 1)) 截取用于议商的实的数字,参见说明1 i=1 while shu >= i*(fa//(10**(bu_shu*2 1))): i=i 1 ci_shang=i-1 ci_shang:次商 fu=ci_shang*1*(10**(bu_shu*2)) fu:所得副 temp_fa=fa fu temp_fa:临时法,用于议商 temp_shi=shi-ci_shang*temp_fa temp_shi:临时实,用于议商 # 对所议商导致实小于0的情况进行处理 while temp_shi<0: ci_shang=ci_shang-1 fu=ci_shang*1*(10**(bu_shu*2)) temp_fa=fa fu temp_shi=shi-ci_shang*temp_fa fa=temp_fa fa:法 shi=temp_shi shi:实 l_shang.append(ci_shang) # 以所得副从定法。复除,折下如前。 while bu_shu > 0: 直至借算退到原位: jie_suan=jie_suan 2 借算向后退一步 bu_shu=bu_shu-1 # 以所得副从定法,复除,折下 fa=(fa fu)//10 # 以复议一乘之,,所得副以加定法,以除。 shu=shi//(10**(bu_shu*2 1)) i=1 while shu >= i*(fa//(10**(bu_shu*2 1))): i=i 1 ci_shang=i-1 fu=ci_shang*1*(10**(bu_shu*2)) temp_fa=fa fu temp_shi=shi-ci_shang*temp_fa while temp_shi<0: ci_shang=ci_shang-1 fu=ci_shang*1*(10**(bu_shu*2)) temp_fa=fa fu temp_shi=shi-ci_shang*temp_fa fa=temp_fa shi=temp_shi l_shang.append(ci_shang) if shi == 0: s='' s:商的字符串,初始为空 for shang in l_shang: 遍历商的列表,组成商的字符串 s=s str(shang) pfg=int(s) 商的字符串转换成数字赋值 pfg return pfg else: return -1if __name__ == '__main__': 参见说明2 print("积:") ji=input() pfg=kai_fang(int(ji)) if pfg != -1: print("为方:",pfg) else: print("开之不尽,不可开")说明:
1. 程序中使用了幂运算符**来截取用于议商的实的数字,比如10**4表示10的4次方10000,10**3表示10的3次方1000,10**1表示10的一次方10。以55225为例,议初商时:
>>> shi = 55225>>> bu_shu = 2>>> shu=shi//(10**(bu_shu*2))>>> shu5议次商时:
>>> shi = 15225>>> bu_shu = 1>>> shu=shi//(10**(bu_shu*2 1))>>> shu15议三商时:
>>> shi = 2325>>> bu_shu = 0>>> shu=shi//(10**(bu_shu*2 1))>>> shu2322.if __name__ == '__main__'语句的意思是:当.py文件直接运行时,if __name__ == '__main__'之下的代码块将会运行;当其他文件以模块的形式导入该.py文件时,if __name__ == '__main__'之下的代码块不会运行。也就是说,其他程序可以使用import语句,以模块的方式调用该文件中的kai_fang函数,而if __name__ == '__main__'之下的代码块在函数调用时,不会运行。
注意
import语句不支持中文字符(不支持“import 开方术”),文件名“开方术.py”需改成英文字符(如“kaifang.py”),才可以在其他文件中作为模块导入(支持“import kaifang”)。
__name__是python的一个系统变量,前后加了双下划线是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
.py文件直接运行时,__name__的值是"__main__",即当前执行文件的名称,__name__ == '__main__'的结果是True,所以,if __name__ == '__main__'之下的代码块将会运行。
当其他文件以模块的形式导入该.py文件时,则__name__值是"当前模块名",__name__ == '__main__'的结果是False,所以,if __name__ == '__main__'之下的代码块不会运行。
17.3 运行结果
运行脚本,解决问题,结果如图17-18所示。
图17-18 开方术运行结果
17.4 练一练
为更清楚地表示开方术的算法,“开方术.py”源码中有很多重复的语句。将“开方术.py”源码进行提炼和简化,运行脚本,查看结果。
本文章出自《读九章算术快速学python》专栏,将通过《九章》来学习Python语言、学习编程、学习算法思维。如果您对python学习感兴趣,点击下方订阅专栏,就可以看到本专栏全部内容,永久有效。
以上内容为【python编程基础:开方术python相关源码解析及运行结果|python人工智能源码】的相关内容,更多相关内容关注lot物联网。