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

您所在的位置:网站首页 数字转换中文大写问题Python 小技巧2:Python 实现阿拉伯数字转化为中文数字

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

2023-10-14 08:41| 来源: 网络整理| 查看: 265

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

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

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

而值此圣诞佳节,我就贡献一下个人的绵薄之力,向大家展示一下我个人研究的简易的通过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]] while chinese.endswith("零") and len(chinese) > 1: #个位数如果为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]] while chinese.endswith("零") and len(chinese) > 1: #个位数如果为0,不读出 chinese = chinese[:-1] if chinese.count("零") > 1: #中文数字中最多只有1个零 count_0 = chinese.count("零") chinese = chinese.replace("零","",count_0-1) return chinese

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

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

  

 此为分界线,记录本博客的修改情况:

1、第1次修改:2023年5月26日,借用户“王二の黄金时代”所提出意见,对代码进行修改,解决了尾部“0”的数量多于等于2个时,阿拉伯数字转为的中文数字尾部出现“零”的情况。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3