小技巧2:Python 实现阿拉伯数字转化为中文数字

大家好,我是Kamen Black君,今天给大家介绍一个小技巧:如何用Python 代码实现阿拉伯数字转化为中文数字。

都说光阴似箭,日月如梭,2022年的车轮很快也要驶向了终点。不知道大家在平常的生活中,有没有碰到过一些关于数字转化的问题,比如上编程课时经常能遇到的二进制数转化为十进制、八进制或者十六进制;还有银行转账时能够碰到的中文大写数字。

小技巧2:Python 实现阿拉伯数字转化为中文数字

print("祝大家每天快乐,love and peace!")

而值此圣诞佳节,我就贡献一下个人的绵薄之力,向大家展示一下我个人研究的简易的通过Python实现的将阿拉伯数字转化为中文数字的方法,搭建一条东西方的桥梁。

小技巧2:Python 实现阿拉伯数字转化为中文数字

这个方法主要通过Python代码进行实现,其中代码主要由三大部分组成:

1、数字字典;

2、计算数字最大位的函数;

3、数字转换主函数。

一、首先是数字字典:

这个部分主要涉及到两个字典的编写:个位数字典与位称字典。

个位数字典自然是将0到9的阿拉伯数字与“零”到“九”的中文数字进行配对;而位称字典则是从1到4对应“十”、“百”、“千”、“万”这4个位数称谓,简称为“位称”。

numdict = {1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",0:"零"} #个位数的字典
digitdict = {1:"十",2:"百",3:"千",4:"万"} #位称的字典

二、其次是计算数字最大位的函数:

这个部分是通过函数计算出阿拉伯数字的最大位,也就是确定中文数字的最大位,以便确定中文数字的命名规则。

def maxdigit(number,count):
    num = number//10 #整除是//
    if num != 0:
        return maxdigit(num,count+1) #加上return才能进行递归
    else:
        digit_num = number%10 #digit_num是最高位上的数字
        return count,digit_num #count记录最高位

 三、最后是数字转换主函数:

这个部分结合第一、第二部分与各位数字以及中文数字的命名规则,便可以得到阿拉伯数字对应的中文数字。

def No2Cn(number):
    max_digit,digit_num = maxdigit(number,0)

    temp = number
    num_list = [] #储存各位数字
    while temp > 0:
        position = temp%10
        temp //= 10 #整除是//
        num_list.append(position)

    chinese = ""
    if max_digit == 0: #个位数
        chinese = numdict[number]
    elif max_digit == 1: #十位数
        if digit_num == 1: #若十位上是1,则称为“十几”,而一般不称为“一十几”(与超过2位的数分开讨论的原因)
            chinese = "十"+numdict[num_list[0]]
        else:
            chinese = numdict[num_list[-1]]+"十"+numdict[num_list[0]]
    elif max_digit > 1: #超过2位的数
        while max_digit > 0:
            if num_list[-1] != 0: #若当前位上数字不为0,则加上位称
                chinese += numdict[num_list[-1]]+digitdict[max_digit]
                max_digit -= 1
                num_list.pop(-1)
            else: #若当前位上数字为0,则不加上位称
                chinese += numdict[num_list[-1]]
                max_digit -= 1
                num_list.pop(-1)
        chinese += numdict[num_list[-1]]
        
    if chinese.endswith("零"): #个位数如果为0,不读出
        chinese = chinese[:-1]
    if chinese.count("零") > 1: #中文数字中最多只有1个零
        count_0 = chinese.count("零")
        chinese = chinese.replace("零","",count_0-1)
    return chinese

总结一下,以上简单介绍了一下我个人通过Python代码实现阿拉伯数字向中文数字转化的实现思路,虽然目前只能最多实现万位数的转化,但是中文数字就是4位数为一阶的,即万到亿,亿到兆,兆到京的转化,是以10的4次方为进制的。鉴于我的方法可以实现连续4位数的转化,所以可以将我的这个方法作为基础, 延伸到更高位数的转化

下面给出数字转化的完整代码:

numdict = {1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九",0:"零"} #个位数的字典
digitdict = {1:"十",2:"百",3:"千",4:"万"} #位称的字典


def maxdigit(number,count):
    num = number//10 #整除是//
    if num != 0:
        return maxdigit(num,count+1) #加上return才能进行递归
    else:
        digit_num = number%10 #digit_num是最高位上的数字
        return count,digit_num #count记录最高位

def No2Cn(number):
    max_digit,digit_num = maxdigit(number,0)

    temp = number
    num_list = [] #储存各位数字(最高位的数字也可以通过num_list[-1]得到
    while temp > 0:
        position = temp%10
        temp //= 10 #整除是//
        num_list.append(position)

    chinese = ""
    if max_digit == 0: #个位数
        chinese = numdict[number]
    elif max_digit == 1: #十位数
        if digit_num == 1: #若十位上是1,则称为“十几”,而一般不称为“一十几”(与超过2位的数分开讨论的原因)
            chinese = "十"+numdict[num_list[0]]
        else:
            chinese = numdict[num_list[-1]]+"十"+numdict[num_list[0]]
    elif max_digit > 1: #超过2位的数
        while max_digit > 0:
            if num_list[-1] != 0: #若当前位上数字不为0,则加上位称
                chinese += numdict[num_list[-1]]+digitdict[max_digit]
                max_digit -= 1
                num_list.pop(-1)
            else: #若当前位上数字为0,则不加上位称
                chinese += numdict[num_list[-1]]
                max_digit -= 1
                num_list.pop(-1)
        chinese += numdict[num_list[-1]]
        
    if chinese.endswith("零"): #个位数如果为0,不读出
        chinese = chinese[:-1]
    if chinese.count("零") > 1: #中文数字中最多只有1个零
        count_0 = chinese.count("零")
        chinese = chinese.replace("零","",count_0-1)
    return chinese

好了以上就是所有的内容,希望大家多多关注点赞收藏,这对我有很大的帮助。谢谢大家了!

小技巧2:Python 实现阿拉伯数字转化为中文数字

好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~

小技巧2:Python 实现阿拉伯数字转化为中文数字  

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月29日
下一篇 2023年3月29日

相关推荐