手把手教你如何用Python编程实现减分术?

第8章 减分术

Python编程要点

  • import语句
  • 调用模块函数
  • 使用\表示换行

8.1 图解九章

“减分”就是由较大的分数减去较小的分数而求其差。“减分术”即分数减法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qz16S168-1579049629719)(/api/storage/getbykey/original?key=19113c50e758d17c1b44)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6YToU9g-1579049629720)(/api/storage/getbykey/original?key=191106a478f78c39686e)]

图8-1 问题一之问答

提示

图8-1所示由图解九章源码中的“图解减分术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。

问题一今有九分之八,减其五分之一,问余几何?

答曰:四十五分之三十一。

问题二又有四分之三,减其三分之一,问余几何?

答曰:十二分之五。

减分术曰:母互乘子,以少减多,余为实。母相乘为法。实如法而一。

问题一今有八分之五,二十五分之十六,问孰多?多几何?

答曰:二十五分之十六多,多二百分之三。

问题二又有九分之八,七分之六,问孰多?多几何?

答曰:九分之八多,多六十三分之二。

问题三又有二十一分之八,五十分之十七,问孰多?多几何?

答曰:二十一分之八多,多一千五十分之四十三。

课分术(“课分”就是比较两分数的大小,并考核较大分数比较小分数大多少)曰:母互乘子,以少减多,余为实。母相乘为法。实如法而一,即相多也。

8.2 减分术.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)

8.3 运行结果

运行“减分术.py”来解决减分术中的问题一、问题二、以及课分术的问题一、问题二、问题三,运行结果如图8-2所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iotRzuzY-1579049629721)(/api/storage/getbykey/original?key=19115641813148d3c6b3)]

图8-2 减分术运行结果

结果显示前两个是减分术的问题,后三个是课分术的问题。

8.4 练一练

课分术和减分术的算法相同,只是输出不同。修改减分术代码,将代码的输出部分修改成课分术,结果回答“孰多?多几何?”

提示:课分术是比较分数大小,所以要记录哪一个是较大的分数。

发布了481 篇原创文章 · 获赞 277 · 访问量 86万+
展开阅读全文

没有更多推荐了,返回首页

分享到微信朋友圈

×

扫一扫,手机浏览