资讯专栏INFORMATION COLUMN

python实现中文数字转阿拉伯数字

cjie / 2284人阅读

摘要:情景分析零在中文数字串中起补位作用,处理的时候可以忽略掉一十通常直接缩减为十,意味着十前获取不到数字时为一十单位千百十前的数为单个数字单位万前的数可以由复合而成单位亿前的数可以由及亿本身复合而成代码实现一二三四五六七八九千百十十前

情景分析

(1) 零在中文数字串中起补位作用,处理的时候可以忽略掉
(2) 一十通常直接缩减为十,意味着十前获取不到数字时为一十
(3) 单位千、百、十前的数为单个数字
(4) 单位万前的数可以由(3)复合而成
(5) 单位亿前的数可以由(3)、(4)及亿本身复合而成

代码实现
digit = {"一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9}
def _trans(s):
    num = 0
    if s:
        idx_q, idx_b, idx_s = s.find("千"), s.find("百"), s.find("十")
        if idx_q != -1:
            num += digit[s[idx_q - 1:idx_q]] * 1000
        if idx_b != -1:
            num += digit[s[idx_b - 1:idx_b]] * 100
        if idx_s != -1:
            # 十前忽略一的处理
            num += digit.get(s[idx_s - 1:idx_s], 1) * 10
        if s[-1] in digit:
            num += digit[s[-1]]
    return num
def trans(chn):
    chn = chn.replace("零", "")
    idx_y, idx_w = chn.rfind("亿"), chn.rfind("万")
    if idx_w < idx_y:
        idx_w = -1
    num_y, num_w = 100000000, 10000
    if idx_y != -1 and idx_w != -1:
        return trans(chn[:idx_y]) * num_y + _trans(chn[idx_y + 1:idx_w]) * num_w + _trans(chn[idx_w + 1:])
    elif idx_y != -1:
        return trans(chn[:idx_y]) * num_y + _trans(chn[idx_y + 1:])
    elif idx_w != -1:
        return _trans(chn[:idx_w]) * num_w + _trans(chn[idx_w + 1:])
    return _trans(chn)
测试例子
print(trans("十") == 10) 
print(trans("一百零一") == 101)
print(trans("九百二十一") == 921)
print(trans("五十六万零一十") == 560010)
print(trans("一万亿零二千一百零一") == 1000000002101)
print(trans("一万亿二千一百万零一百零一") == 1000021000101)
print(trans("一万零二百三十亿四千零七千八百九十") == 1023000007890)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41323.html

相关文章

  • Python: 熟悉又陌生的字符编码

    摘要:常见的字符编码有编码,编码,编码等。码只规定了个字符的编码,这在美国是够用的。小结是一种针对的可变长度字符编码,它是的实现方式之一。 字符编码是计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。本文主要分以下几个部分介绍: 基本概念 常见字符编码简介 Python 的默认编码 Py...

    Vultr 评论0 收藏0
  • [零基础学python]玩字符串(1)

    摘要:操练一下字符串吧。它是在告诉计算机,它里面包裹着的是一个字符串。连接字符串方法在中按照下面方法操作老齐教老齐教这是一种最简单连接两个字符串的方法。请看官字符编码就知道了。 如果对自然语言分类,有很多中分法,比如英语、法语、汉语等,这种分法是最常见的。在语言学里面,也有对语言的分类方法,比如什么什么语系之类的。我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相...

    eechen 评论0 收藏0
  • 阿拉数字中文数字思路及解决算法(以PHP语言描述)

    摘要:前段时间在社区看到一个很有意思的题目数字转中文语言描述一开始我是这样写的将一个字符串转换为数组零一二三四五六七八九一二三七一二四一二九一二四然后题主回复我说根据你这个我只能做出来十以内的开始我的理解太过简单,所以又写了一下思路是这样的第一次 前段时间在 segmentfault 社区看到一个很有意思的题目 数字转中文(PHP语言描述) 一开始我是这样写的

    terro 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<