项目须要,将一些整数转为汉字字符串,搜索了一下你们基本都是本身写一下函数转换,参考了帖子:https://blog.csdn.net/PlusCha...;在其中速度最快的第三种程序的基础上,本身作了一些改进,让代码更精简而且更快一些。git
基本思想仍是先将整数字符串化后转为列表,而后进行汉字字符的替换。再根据汉语语法结构加上单位,以及把多余的零和一(例如“一十二”中的“一”)去掉。代码以下:github
# 亿位如下的天然数 def num2Chinese(d): if 100000000 > d > 0: num = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] kin = ['十', '百', '千', '万'] num_str = list(str(d)) num_str.reverse() Chinese_str = "" for index, i in enumerate(num_str): if index!=0: if i != "0": Chinese_str = num[int(i)] + kin[(index%4)-1] + Chinese_str elif Chinese_str: if index==4 : if Chinese_str[0]!="零": Chinese_str = kin[3] + "零" + Chinese_str else: Chinese_str = kin[3] + Chinese_str if not(Chinese_str[0] in ["零", "万"] and i=="0"): Chinese_str = num[int(i)] + Chinese_str else: if i != "0": Chinese_str = num[int(i)] + Chinese_str if Chinese_str[:2] == "一十": Chinese_str = Chinese_str[1:] return Chinese_str
github地址:https://github.com/Pengyiqing...函数
转换的过程思路以下:将数字列表化后倒置,即先从个位开始分析,个位上只须要考虑该位是否为零,为零则汉字字符无需声明。从十位开始,既要考虑加相应单位(好在亿如下的算是两次【10、百、千】的循环,能够合并判断,若是该位是【零】,根据已经生成的字符串的第一个是不是【零】要判断是否要加上。循环之间用【万】相连,【万】的状况就更复杂一些,由于【万】字前面不加零,因此再加单独判断便可。测试
在本人电脑上进行测试,参考例子里最快的那个代码,转化1至9999999的运行时间为73秒。而上面那个优化后的代码,运行时间为48秒。优化