制打印如下所示的n行数字金字塔_一日一技:在Python中实现阿拉伯数字加上中文数字...
在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中实现阿拉伯数字加上中文数字...相关推荐
- 制打印如下所示的n行数字金字塔_关于央行数字货币的技术猜测
框架 这是一个很不严谨的题目,搞技术的,居然要猜测? 央行数字货币现在已经走入千家百户(深圳的千家百户),看这执行速度马上就要普及,马上用户遍神州.但央行数字货币的技术细节,却深藏不露,鲜有人知. 只 ...
- python删除指定行_关于csv:删除python中的特定行和对应文件
我想删除90%的"转向"值等于0的行.这三个图像都有一个对应的图像文件,中间,左边和右边.我也要删除它们.csv文件如下: 我编写了以下代码,以至少获取转向值为0的文件.我所需要的 ...
- 一日一技python安装_一日一技:快速实现Python 命令行参数
一日一技:快速实现Python 命令行参数 摄影:产品经理 厨师:kingname 我们有时候需要使用 Python 开发一些命令行工具,并在运行命令的时候指定一些参数,例如: python3 xxx ...
- python列表输入10个数、并排序-我该如何对一百万个数字进行排序,并且仅在Python中打印前十个数字?...
我有一个包含一百万个数字的文件. 我需要知道如何有效地对其进行排序,以免使计算机停滞不前,并且仅打印前十名. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁
在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...
- 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 ...
- python progressbar 多行_使用单击.progressbar在Python中使用多处理
我有一个巨大的列表,我需要处理,这需要一些时间,所以我把它分为4个部分,并用一些函数对每个部分进行多重处理.用4个内核运行仍然需要一些时间,所以我想我应该在函数中添加一些进度条,这样它就可以告诉我每个 ...
- python16进制表示0xad_在 Python 中 0xad 是合法的十六进制数字表示形式。 (2.0分)_学小易找答案...
[填空题]表达式 isinstance('4', (int, float, complex)) 的值为 _____________ .( ) (2.0分) [判断题]Python 3.x 完全兼容 P ...
- python中各进制的表示及其转换
[时间]2018.11.29 [题目]python中各进制的表示及其转换 参考链接:https://blog.csdn.net/weixin_40717096/article/details/8019 ...
最新文章
- go 写文件_Pythonista 的 Go 之旅
- php dir()函数的用法
- 深度学习笔记——生成模型
- vs2010 学习Silverlight学习笔记(18):JavaScript
- centos 7.2 安装 mysql_liunx centos7.2系统上如何安装和配置mysql数据库
- 修改R语言安装包的默认路径
- Win7更改SATA模式为AHCI
- Python中类的多继承
- PAT-求特殊方程的正整数解(简单编程题)
- matlab推导高斯两点求积公式,谁有复何求积公式和高斯求积公式在matlab中实现的... 确定求积公式(如下图)中的待定系数,并指出所构造的......
- 医学图像笔记(八)窗宽窗位
- SQL*Plus 系统变量之59 - VER[IFY]
- anaconda3更新后,菜单栏中没有Anaconda Promt
- 银河证券的系统也错的太厉害了吧..
- less 使用入门教程
- RAID独立磁盘冗余阵列,对比各模式下的性能优劣
- pycharm破解操作
- RTX之——时间管理
- 2、Docker的安装、设置国内镜像源
- 16进制转2进制代码
热门文章
- SAP CRM WebClient UI交互式报表的Gross Value工作原理
- SAP UI5 Simple form rendering
- How CRM_JEST is influenced by status change in WebUI
- 部署在Netweaver应用上的Fiori缓存的调试
- SAP云平台上应用的HTTPS证书
- 一个基于nodejs开发的微服务脚手架应用,架构和CRM WebUI很像
- webpack里JavaScript文件编译的调试
- 使用nodejs消费SAP Cloud for Customer上的Web service
- 阿尔法大蛋智能机器人功能_智能机器人怎么选?阿尔法蛋大蛋2.0助力孩子新学期...
- Java入门算法(递归篇)丨蓄力计划