如何在 Python 中用中文做数学运算?

:point_up_2: 点击上方蓝字“ Python猫 ”, 免费获得 一个公众号

花下猫语: 在 Python 中是否可以实现中文数字的四则运算呢? 答案是肯定的。 今天分享的文章,会对这个问题给出令人满意的解答。 这个操作可能不会被大家用于实际的项目中,它的意义并不在此。 之所以分享这篇文章,一方面是我觉得这个问题有点意思,另一方面则是因为它的实现过程很好地讲解了几个魔术方法的用途。

本文转载自“ 未闻Code ”,这是个少有的坚持优质原创的公众号,它的“一日一技”系列,写了很多体量小却有意思的话题,推荐一读。

 

 

 

 

 

图 | 宫崎骏电影《侧耳倾听》

在Python 3里面,中文是可以作为变量名的,而运算符又可以重载,基于这两个特性,我们可以实现阿拉伯数字与中文数字的四则运算。

首先我们定义一个类 Num :

然后把这个类初始化为各个中文数字:

运行效果如下图所示:

 

 

 

Python资源共享群:484031800

代码里面,通过实现 __repr__ ,能实现在 Jupyter 或者Python命令行交互环境里面输入变量名回车就显示变量的值。

通过实现 __str__ ,能实现在Python 里面 print(变量) 的时候打印出具体的值。

但现在还不够,当我们进行四则运算的时候,会报错:

 

 

 

 

为了能够正常实现 一+1 ,我们需要实现 __add__ 方法:

运行效果如下图所示:

 

 

 

 

但是,如果我们把加号两侧的数字兑换一下,代码又报错了,如下图所示:

 

 

 

 

这是由于,当我们执行 a+b 的时候,Python会调用 a 对象里面的 __add__ 方法,所以当我们执行 一+1 的时候,调用的是 一 里面的 __add__ 方法,这是我们自己写的,所以能够正常运行。

但是当我们执行 1+一 的时候,调用的是 1 里面的 __add__ 方法。在Python里面,数字对象里面的 __add__ 方法只能实现数字加数字。

但是我们不能修改Python 内置数字的 __add__ 方法,所以我们需要使用 __radd__ 方法。它的作用是,在 1+一 执行的时候,如果 1 里面的 __add__ 运行失败了,那么就会调用 一 里面的 __radd__ :

运行效果如下图所示:

 

 

 

 

同样的原理,你可以自己实现减法 __sub__/__rsub__ 、乘法 __mul__/__rmul__ 和除法 __truediv__/__rtruediv__ 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值