返回列表 发帖

[原创教程] Python实现中文数字替换成阿拉伯数字

本帖最后由 Gin_Q 于 2020-7-20 10:47 编辑

大家有兴趣可以测测!
#coding=utf-8
#By Gin
#2020/7/17
#Rev 02
ch_dict = {u'零':0, u'一':1, u'二':2, u'三':3, u'四':4,
        u'五':5, u'六':6, u'七':7, u'八':8, u'九':9,u'十':10,
        u'百':100, u'千':10 ** 3, u'万':10 ** 4,u'〇':0,
        u'壹':1, u'贰':2, u'叁':3, u'肆':4,u'伍':5,
        u'陆':6, u'柒':7, u'捌':8, u'玖':9,u'拾':10,
        u'佰':100, u'仟':10 ** 3, u'萬':10 ** 4,u'亿':10 ** 8, u'億':10 ** 8,
        u'幺': 1,u'两':2}
def converion(temp, unit):
    intr = 0
    # print(temp, unit)
    temp_len = len(temp)
    if temp_len <= 2 and temp[0] == 10: #十到十九需要单独转换
        for i in temp:
            intr += i
        return intr * unit
    for i in range(temp_len):
        if temp[i] > 9 and temp[i-1] != 0:
            intr += temp[i] * temp[i-1]
    if temp[-1] < 10: intr += temp[-1]
    return intr * unit
def split_unit(temp, unit):
    nu = []
    while True:
        if temp[0] != unit:
            nu.append(temp.pop(0))
            continue
        temp.pop(0)
        return converion(nu, unit)
def onere(strarr):
    intr = 0
    temp = [ch_dict[i] for i in strarr] #列表666[6, 100, 6, 10, 6]
    if 10**8 in temp:
        intr += split_unit(temp, 10**8)
    if 10**4 in temp:
        intr += split_unit(temp, 10**4)
    if temp:
        intr += converion(temp, 1)
    return str(intr)
test_dig = [u'九',
                u'十一',
                u'一百二十三',
                u'一千二百零三',
                u'一万一千一百零一',
                u'十万零三千六百零九',
                u'一百二十三万四千五百六十七',
                u'一千一百二十三万四千五百六十七',
                u'一亿一千一百二十三万四千五百六十七',
                u'一百零二亿五千零一万零一千零三十八',
                u'一千一百一十一亿一千一百二十三万四千五百六十七',
                ]
               
for i in test_dig:
    print(i,'\n',onere(i))COPY
9
十一
11
一百二十三
123
一千二百零三
1203
一万一千一百零一
11101
十万零三千六百零九
103609
一百二十三万四千五百六十七
1234567
一千一百二十三万四千五百六十七
11234567
一亿一千一百二十三万四千五百六十七
111234567
一百零二亿五千零一万零一千零三十八
10250011038
一千一百一十一亿一千一百二十三万四千五百六十七
111111234567
请按任意键继续. . .COPY

新手
看不懂
没看懂
我是新新手

TOP

如果是全角数字"8080"  这种就不要用字典映射转换了。   可以直接int()转。
另外
python3中的字符串都是unicode字符串,前缀可以不加u了吧。
47行,参数直接传temp就可以,没必要传一个副本吧。

TOP

本帖最后由 Gin_Q 于 2020-7-20 10:45 编辑

回复 3# cfwyy77_bat


    字典是从网上代码复制的,核心代码自己写的!
    8080那个我删除了,忘了修改字典了,的确直接拼接就好了!
    47行的确直接传进去就好了,因为前面的元素已经被弹出了!
    谢谢指正!很赞哦!

TOP

回复 2# leo.liu


    多看视频,多看书!找个论坛多问问(或者百度),基础重要!

TOP

返回列表