实现功能:
输入阿拉伯数字,输出为中文数字
如:
Number:666666
六十六万六千六百六十六
理论可以实现无限高位数的转化
前提是代码中的 unitList 足够长!!!
完整代码:
# -*- coding: UTF-8 -*-
# 汉字数字大全 https://baike.baidu.com/item/%E4%B8%AD%E6%96%87%E6%95%B0%E5%AD%97/2921705
numList = "零一二三四五六七八九"
digitList = ["", "十", "百", "千", "万"]
unitList = ["", "亿", "兆", "京", "垓", "秭", "穣", "沟", "涧", "正", "载", "极", "恒河沙", "阿僧祇", "那由他", "不可思议", "无量大数"]
# unitList = ["", "亿", "兆", "京", "垓", "秭", "穣", "沟", "涧", "正", "载", "极", "恒河沙", "阿僧祇", "那由他", "不可思议", "无量大数",
# "大数", "天", "空", "散", "虚", "寂", "竭", "莫", "宁", "静", "窈", "冥", "忘", "无", "杳", "溟", "涬", "溟涬", "杳冥",
# "杳溟", "杳涬", "溟涬杳", "溟涬杳冥", "溟涬杳溟", "杳冥无际", "溟涬无垠", "杳冥无垠", "杳溟无垠", "溟涬杳冥无垠",
# "杳冥溟涬无垠", "杳溟溟涬无垠", "杳冥溟涬杳无垠", "杳溟溟涬杳冥无垠", "杳冥杳溟溟涬杳冥无垠", "无尽", "无穷", "无界",
# "无疆", "无垠", "无央", "无极", "无量", "无法", "无边", "无等", "无等等"]
# 文心一言3.5回答(太长了)
def No2zh4pin(number): # 不能超过百万(不含百万)
number = [int(s) for s in str(number)]
numberLen = len(number)
chinese = ""
if numberLen == 1 and number[0] == 0: # 如果是0
chinese += numList[0]
elif numberLen == 2 and number[0] == 1: # 如果是十几
chinese += digitList[1]
if number[1]: # 如果不是整十
chinese += numList[number[1]]
else: # 非特殊情况
for num in enumerate(number[::-1]):
if not num[1] and len(chinese) > 0 and chinese[-1] != numList[0]: # 多个0只读一个,低位无数字不读
chinese += numList[0]
elif num[1]: # 不是零,正常读
chinese += digitList[num[0]] + numList[num[1]]
chinese = chinese[::-1] # 反转,得到正常字符串
return chinese
def No2zh8pin(number): # 不能超过兆(不含兆)
chinese = ""
num0 = int(number // 10000) # 获取高四位
num1 = number % 10000 # 获取低四位
if num0: # 如果高位非零
chinese += No2zh4pin(num0) + digitList[4]
if num1 and num1 < 1000: # 如果要添加零
chinese += numList[0]
if num1 or not num0: # 如果低位非零或高位是零
chinese += No2zh4pin(num1)
return chinese
def No2zh(number):
number = str(number)[::-1] # 转化为字符串
number = [int(number[i:i + 8][::-1]) for i in range(0, len(number), 8)] # 按八位分割
chinese = []
for num in enumerate(number): # 循环八位数字
if not num[1] and num[0] + 1 != len(number): # 如果这八位是零
continue
chinese.append(No2zh8pin(num[1]) + unitList[num[0]]) # 添加位称
if num[0] - 1 >= 0 and number[num[0] - 1] and number[num[0] - 1] < 1000000: # 如果要添加零
chinese[-1] += numList[0]
return "".join(chinese[::-1]) # 反转,得到正常字符串
if __name__ == "__main__":
while 1: # 循环输入
print(No2zh(int(input("Number:"))))
结果:
Number:666666
六十六万六千六百六十六
Number:123456789
一亿二千三百四十五万六千七百八十九
Number:500424460
五亿零四十二万四千四百六十
Number:145423450001234323411111166666600000000001000001456545677763222656789
一万四千五百四十二涧三千四百五十万零十二沟三千四百三十二万三千四百一十一穣一千一百一十一万六千六百六十六秭六千六百万垓零一千京零十四万五千六百五十四兆五千六百七十七万七千六百三十二亿二千二百六十五万六千七百八十九