Python2裡,把中文數字轉阿拉伯數字
阿新 • • 發佈:2019-02-06
剛學到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