1. 程式人生 > >Python2裡,把中文數字轉阿拉伯數字

Python2裡,把中文數字轉阿拉伯數字

剛學到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