猫史档案馆


【Python作品分享】阿拉伯数字与汉字数字的转换2.0【作品秀】

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


【作品展示】

center_image

 

【作品介绍】

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


回复

上一页1 页 / 共 0下一页