正整数的中文表示python_【python3】将小于亿的正整数转为汉字字符

项目需要,将一些整数转为汉字字符串,搜索了一下大家基本都是自己写一下函数转换,参考了帖子:https://blog.csdn.net/PlusCha...;在其中速度最快的第三种程序的基础上,自己做了一些改进,让代码更精简并且更快一些。

基本思想还是先将整数字符串化后转为列表,然后进行汉字字符的替换。再根据汉语语法结构加上单位,以及把多余的零和一(例如“一十二”中的“一”)去掉。代码如下:

# 亿位以下的自然数

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

转换的过程思路如下:将数字列表化后倒置,即先从个位开始分析,个位上只需要考虑该位是否为零,为零则汉字字符无需声明。从十位开始,既要考虑加相应单位(好在亿以下的算是两次【十、百、千】的循环,可以合并判断,如果该位是【零】,根据已经生成的字符串的第一个是否是【零】要判断是否要加上。循环之间用【万】相连,【万】的情况就更复杂一些,因为【万】字前面不加零,所以再加单独判断即可。

在本人电脑上进行测试,参考例子里最快的那个代码,转化1至9999999的运行时间为73秒。而上面那个优化后的代码,运行时间为48秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值