用户:秤杆不平衡查看:0 回复:0 评论:0 创建时间:2023-05-02T16:34:50
【作品展示】

【作品介绍】
2.0
【作品源代码】
#将阿拉伯数字转换为汉字数字
#例子:1234567890987654321
#以四位数字,自右往左分割:123,4567,8909,8765,4321
#加上单位:123京4567兆8909亿8765万4321
#细分:
# 123 一百二十三
# 4567 四千五百六十七
# ......
# 4321 四千三百二十一
#拼接:一百二十三京四千五百六十七兆...八千七百六十五万四千三百二十一
#原因:汉字数字是以四位分割的,再加上单位,四位之类用另外的单位读的
#类似几千几百几十几(单位)几千几百几十几(单位)几千几百几十几(单位)...几千几百几十几(单位)几千几百几十几的形式
#当然还有许多例外情况,比如零,需要额外考虑很多情况。
def model(num):
string = str(num)
kdist = {"1": "一", "2": "二", "3": "三", "4": "四", "5": "五",
"6": "六", "7": "七", "8": "八", "9": "九", "0": "零", }
if len(string) == 1:
return kdist[string]
elif len(string) == 2:
orstring = kdist[string[0]]+"十"
if string[1] == "0":
return orstring
else:
return orstring+kdist[string[1]]
elif len(string) == 3:
orstring = kdist[string[0]]+"百"
if string[1] == "0":
if string[2] == "0":
return orstring
else:
return orstring+"零"+kdist[string[2]]
else:
return orstring+model(string[1]+string[2]) # 万能的递归
elif len(string) == 4:
orstring = kdist[string[0]]+"千"
if string[1] == "0":
if string[2] == "0":
if string[3] == "0":
return orstring
else:
return orstring+"零"+kdist[string[3]]
else:
return orstring+"零"+model(string[2]+string[3])
else:
return orstring+model(string[1]+string[2]+string[3])
def ten_numm(num):
k = ["一十", "一十一", "一十二", "一十三", "一十四", "一十五", "一十六", "一十七", "一十八", "一十九"]
for i in k:#特殊情况:10~19
if num==i:
return num[1:3]
return num
def numm(num):
string = str(num)
klist = ["", "万", "亿", "兆", "京", "垓",
"秭", "穰", "沟", "涧", "正", "载", "极",
"恒河沙", "阿僧祇", "那由他", "不可思议",
"无量", "大数", "全仕祥", "古戈尔", "频波罗",
"京杰罗", "不可说不可说转", "超限数", "绝对无限",
"绝对无量", "绝对小数", "绝对大数", "绝对超限数",
"绝对恒河沙", "绝对那由他", "绝对不可思议", "绝对古戈尔",
"绝对频波罗", "绝对京杰罗", "绝对有量", "绝对有限",
"绝对界限", "绝对有解", "绝对无解", "绝对有量大海",
"绝对无量大海", "绝对无限小数", "绝对无限大数"]
#自古戈尔开始,后面单位可能有误。
string = string[::-1] # 翻转
i = 0
strlist = []
while ((i+1)*4)-1 <= len(string)-1: # 以四个数字为单位,分割字符串
strlist.append(string[(i*4):(i+1)*4])
strlist[i] = strlist[i][::-1] # 要纠正回来
i += 1
if ((i)*4)-1 != len(string)-1: # 查缺补漏
strlist.append(string[(i*4):len(string)])
strlist[i] = strlist[i][::-1]
strlist.reverse() # 该反的到底还是得反的
willreturnlist = [model(strlist[0])] # 其实是can'treturnlist
returnstring = ""
for i in range(1, len(strlist)):
v = str(int(strlist[i])) # 0014成为14
v = model(v) # 只能处理0~9999
if strlist[i][0] == "0" and v != "零": # 零零是不存在的
v = "零"喵 # 以防万一
if v[0] == "零":
for j in range(i, len(strlist)): # 后面是不是全是零,是的话省略!
if int(strlist[j]) != 0:
m = False
break
else:
m = True
# 扯了这么多,其实就是问前面那个数串葫芦是不是零
if willreturnlist[len(willreturnlist)-1] == "零" or willreturnlist[len(willreturnlist)-1] == "":
if len(v) == 1:
v = "" # 是零为空
else:
v = v[1:len(v)] # 非零去头
elif m:
if len(v) == 1:
v = ""
else:
v = v[1:len(v)]
willreturnlist.append(v) # 数串改造完毕,装盒
lenk = len(willreturnlist)-1
willreturnlist[0] = ten_numm(willreturnlist[0])
for i in range(len(willreturnlist)):
returnstring += willreturnlist[i]
if willreturnlist[i] != "" and willreturnlist[i] != "零": # 排除“零万”,“零亿”
returnstring += klist[lenk-i]
return returnstring
num=input()
print(numm(num))
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn