刚学到python的面向对象,很多问题会困扰着自己。又觉得都是些低级的问题。摸索着学习吧。记录一下一个练习脚本。在python2里实现中文数字转换为阿拉伯数字的方法。
PS:这也就是在Python2里才会这么笨的方法。在Python3里,中文都可以做变量名字了,自然不用这么费劲了。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = littleUse
__author__ = BEN
__time__ = 2018/9/24 4:08
# code is far away from bugs with the god animal protecting
I love animals. They taste delicious.
"""
class CN_single(int):
numDic = {'一':1,'二':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9,'十':10,'零':0,'百':100,'千':1000,'万':10000,
u'一': 1, u'二': 2, u'三': 3, u'四': 4, u'五': 5, u'六': 6, u'七': 7, u'八': 8, u'九': 9,
u'十': 10,u'百':100,u'千':1000,u'万':10000,u"零":0}
def __new__(cls,inCn):
inArnm = CN_single.numDic[inCn]
return super(CN_single,cls).__new__(cls,inArnm)
class CNN(int):
"""
convert Chinese numerical to Arab numerical
"""
def __new__(cls, inCNs):
inAraNums = cls.cn_2_arnm(inCNs)
return super(CNN,cls).__new__(cls,inAraNums)
@staticmethod
def split_inCn(inCn):#把输入的中文数字拆分开来每个单独的字
numCoeffient = 1
if isinstance(inCn, str): #如果输入的中文汉字没有u开头,需要处理
numCoeffient = 3
inCn_ln = len(inCn)
cnSplit = []
for n in range(0, inCn_ln, numCoeffient):
cn_num = ''
for i in range(n, n + numCoeffient):
cn_num += inCn[i]
cnSplit.append(cn_num)
return cnSplit
@staticmethod
def cn_2_arnm(inCns):#中文数字转成阿拉伯数字
gradeNum = {'十': 10, '百': 100, '千': 1000, '万': 10000, u'十': 10, u'百': 100, u'千': 1000, u'万': 10000}
zeroNum = {'零': 0, u"零": 0}
cn_lst = CNN.split_inCn(inCns)
arabnum = 0
for n in range(len(cn_lst)):#对已经获得的中文数字list里的每个数字进行转换
temp_num = CN_single(cn_lst[n])
if cn_lst[n] in gradeNum and n!= 0:
temp_num = CN_single(cn_lst[n - 1]) * CN_single(cn_lst[n])
arabnum -= CN_single(cn_lst[n - 1])
elif cn_lst[n] in zeroNum:
continue
arabnum += temp_num
return arabnum
if __name__ == "__main__":
a = CNN("三十五")
b = CNN("十")
c = a + b
print c
d = CNN("一千零二")
e = CNN("二")
print(d*e)
45
20040