社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
Python编程要点
“减分”就是由较大的分数减去较小的分数而求其差。“减分术”即分数减法。
图8-1 问题一之问答
提示
图8-1所示由图解九章源码中的“图解减分术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。
问题一今有九分之八,减其五分之一,问余几何?
答曰:四十五分之三十一。
问题二又有四分之三,减其三分之一,问余几何?
答曰:十二分之五。
减分术曰:母互乘子,以少减多,余为实。母相乘为法。实如法而一。
问题一今有八分之五,二十五分之十六,问孰多?多几何?
答曰:二十五分之十六多,多二百分之三。
问题二又有九分之八,七分之六,问孰多?多几何?
答曰:九分之八多,多六十三分之二。
问题三又有二十一分之八,五十分之十七,问孰多?多几何?
答曰:二十一分之八多,多一千五十分之四十三。
课分术(“课分”就是比较两分数的大小,并考核较大分数比较小分数大多少)曰:母互乘子,以少减多,余为实。母相乘为法。实如法而一,即相多也。
课分术和减分术的算法相同,只是输出不同。这里只列出减分术的源码。
我们首先需要在同目录下新建一个“common.py”文件,把前几章的约分函数yue_fen(),数据转换函数shu_hanzi()、hanzi_shu()复制粘贴到这个文件中,供其他.py文件使用。
# 导入common模块 批注:
import common 使用import语句导入common模块,模块就是common.py文件,
导入后,就可以调用文件中所定义的函数
# 获取各个分数的分子、分母
print('请输入分数,以空格分隔:') 这一部分程序逻辑与合分术相同
l_fenshu = input().split() 用户输入要求中文,如九分之八五分之一
l_fz=[]
l_fm=[]
for f in l_fenshu:
fm,fz = f.split('分之') 以“分之”为分隔符,将输入的分数分隔成分母、分子
l_fz.append(common.hanzi_shu(fz)) 调用common模块中的hanzi_shu函数将汉字分子转换成数字
l_fm.append(common.hanzi_shu(fm)) 调用common模块中的hanzi_shu函数将汉字分母转换成数字
调用模块函数时,需在函数名前加模块名和.
# 母互乘子,以少减多,余为实
cheng1=l_fm[0]*l_fz[1] 分母的列表和分子的列表中的元素互乘
cheng2=l_fm[1]*l_fz[0]
if cheng1 > cheng2: 比较乘积大小,
shi = cheng1-cheng2 以少减多,余值赋予变量shi(实)
else:
shi = cheng2-cheng1
# 母相乘为法 这部分同合分术
fa=1
for m in l_fm:
fa=fa*m
# 实如法而一 这部分同合分术
zheng=shi//fa
# 不满法者,以法命之
fz=shi%fa
fm=fa
# 打印结果 这部分程序逻辑同合分术
if fz == 0: 调用common模块中的shu_hanzi函数
print("余",common.shu_hanzi(zheng)) 将整数部分数字转换成汉字
else:
fz_jian,fm_jian=common.yue_fen(fz,fm) 调用common模块中的yue_fen函数约简分母、分子
if zheng == 0:
str = common.shu_hanzi(fm_jian) 用+连接打印字符串,赋值语句太长,一行无法显示,
+'分之'+common.shu_hanzi(fz_jian) 使用表示换行,这两行是一条语句
else:
str = common.shu_hanzi(zheng)+"又" 这三行是一条语句
+common.shu_hanzi(fm_jian)
+'分之'+common.shu_hanzi(fz_jian)
print("余",str)
运行“减分术.py”来解决减分术中的问题一、问题二、以及课分术的问题一、问题二、问题三,运行结果如图8-2所示。
图8-2 减分术运行结果
结果显示前两个是减分术的问题,后三个是课分术的问题。
课分术和减分术的算法相同,只是输出不同。修改减分术代码,将代码的输出部分修改成课分术,结果回答“孰多?多几何?”
提示:课分术是比较分数大小,所以要记录哪一个是较大的分数。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!