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

首先我们定义一个类 Num:

class Num(object):

def __init__(self, n):

self.n = n

def __repr__(self):

return self.n

def __str__(self):

return str(self.n)

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

一 = Num(1)

五 = Num(5)

八 = Num(8)

运行效果如下图所示:

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

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

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

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

class Num(object):

def __init__(self, n):

self.n = n

def __repr__(self):

return str(self.n)

def __str__(self):

return str(self.n)

def __add__(self, x):

return self.n + x

运行效果如下图所示:

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

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

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

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

class Num(object):

def __init__(self, n):

self.n = n

def __repr__(self):

return str(self.n)

def __str__(self):

return str(self.n)

def __add__(self, x):

return self.n + x

def __radd__(self, x):

return self.n + x

运行效果如下图所示:

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

制打印如下所示的n行数字金字塔_一日一技:在Python中实现阿拉伯数字加上中文数字...相关推荐

  1. 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测

    框架 这是一个很不严谨的题目,搞技术的,居然要猜测? 央行数字货币现在已经走入千家百户(深圳的千家百户),看这执行速度马上就要普及,马上用户遍神州.但央行数字货币的技术细节,却深藏不露,鲜有人知. 只 ...

  2. python删除指定行_关于csv:删除python中的特定行和对应文件

    我想删除90%的"转向"值等于0的行.这三个图像都有一个对应的图像文件,中间,左边和右边.我也要删除它们.csv文件如下: 我编写了以下代码,以至少获取转向值为0的文件.我所需要的 ...

  3. 一日一技python安装_一日一技:快速实现Python 命令行参数

    一日一技:快速实现Python 命令行参数 摄影:产品经理 厨师:kingname 我们有时候需要使用 Python 开发一些命令行工具,并在运行命令的时候指定一些参数,例如: python3 xxx ...

  4. python列表输入10个数、并排序-我该如何对一百万个数字进行排序,并且仅在Python中打印前十个数字?...

    我有一个包含一百万个数字的文件. 我需要知道如何有效地对其进行排序,以免使计算机停滞不前,并且仅打印前十名. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  5. mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁

    在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...

  6. pythonpandas读取csv文件最后一行_使用numpy / pandas在Python中讀取CSV文件的最后N行

    7 With a small 10 line test file I tried 2 approaches - parse the whole thing and select the last N ...

  7. python progressbar 多行_使用单击.progressbar在Python中使用多处理

    我有一个巨大的列表,我需要处理,这需要一些时间,所以我把它分为4个部分,并用一些函数对每个部分进行多重处理.用4个内核运行仍然需要一些时间,所以我想我应该在函数中添加一些进度条,这样它就可以告诉我每个 ...

  8. python16进制表示0xad_在 Python 中 0xad 是合法的十六进制数字表示形式。 (2.0分)_学小易找答案...

    [填空题]表达式 isinstance('4', (int, float, complex)) 的值为 _____________ .( ) (2.0分) [判断题]Python 3.x 完全兼容 P ...

  9. python中各进制的表示及其转换

    [时间]2018.11.29 [题目]python中各进制的表示及其转换 参考链接:https://blog.csdn.net/weixin_40717096/article/details/8019 ...

最新文章

  1. go 写文件_Pythonista 的 Go 之旅
  2. php dir()函数的用法
  3. 深度学习笔记——生成模型
  4. vs2010 学习Silverlight学习笔记(18):JavaScript
  5. centos 7.2 安装 mysql_liunx centos7.2系统上如何安装和配置mysql数据库
  6. 修改R语言安装包的默认路径
  7. Win7更改SATA模式为AHCI
  8. Python中类的多继承
  9. PAT-求特殊方程的正整数解(简单编程题)
  10. matlab推导高斯两点求积公式,谁有复何求积公式和高斯求积公式在matlab中实现的... 确定求积公式(如下图)中的待定系数,并指出所构造的......
  11. 医学图像笔记(八)窗宽窗位
  12. SQL*Plus 系统变量之59 - VER[IFY]
  13. anaconda3更新后,菜单栏中没有Anaconda Promt
  14. 银河证券的系统也错的太厉害了吧..
  15. less 使用入门教程
  16. RAID独立磁盘冗余阵列,对比各模式下的性能优劣
  17. pycharm破解操作
  18. RTX之——时间管理
  19. 2、Docker的安装、设置国内镜像源
  20. 16进制转2进制代码

热门文章

  1. SAP CRM WebClient UI交互式报表的Gross Value工作原理
  2. SAP UI5 Simple form rendering
  3. How CRM_JEST is influenced by status change in WebUI
  4. 部署在Netweaver应用上的Fiori缓存的调试
  5. SAP云平台上应用的HTTPS证书
  6. 一个基于nodejs开发的微服务脚手架应用,架构和CRM WebUI很像
  7. webpack里JavaScript文件编译的调试
  8. 使用nodejs消费SAP Cloud for Customer上的Web service
  9. 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
  10. Java入门算法(递归篇)丨蓄力计划