大家好,我是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 = [] #储存各位数字(最高位的数字也可以通过num_list[-1]得到,最高位也可以通过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
好了以上就是所有的内容,希望大家多多关注,点赞,收藏,这对我有很大的帮助。谢谢大家了!
好了,这里是Kamen Black君。祝国康家安,大家下次再见喽!!!溜溜球~~