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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值