猫史档案馆


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

用户:秤杆不平衡秤杆不平衡查看:7 回复:2 评论:7 创建时间:2023-01-16T19:04:27


【作品展示】

center_image

 

【作品介绍】

大神帮我看看有没有错误的地方,谢谢!

 

【作品源代码】

import random

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]]+"十"#前函数图方便挖了个坑,中流砥柱numm战绩显著,可惜因为掉在坑中败落给捡到便宜的——true_numm
        #这个坑,俗称“一石”大坑。
        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 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)#小小model,只能处理1~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] == "":  # 扯了这么多,其实就是问前面那个数串葫芦是不是零(所以我故意打了1mol多余的字doge)
                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
    for i in range(len(willreturnlist)):
        returnstring += willreturnlist[i]
        if willreturnlist[i] != "" and willreturnlist[i] != "零":  # 零万零亿?!不不不太恐怖了(doge)
            returnstring += klist[lenk-i]
    return returnstring

def true_numm(num):
    if int(num) == 10:#特殊情况:十到十九,其它是一十(N)
        return "十"
    for i in range(11, 20):
        if int(num) == i:
            return "十" + model(str(num)[1])
    return numm(str(num))

f = open("试验1.txt", "w", encoding="utf-8")
for i in range(20000):
    s = random.randint(0, 10**10)
    v = true_numm(s)
    print(s, v)
    f.write(str(s)+","喵+"\n")
f.close()
f = open("试验2.txt", "w", encoding="utf-8")
for i in range(20001):
    s = i
    v = true_numm(s)
    print(s, v)
    f.write(str(s)+","喵+"\n")
f.close()
f = open("试验3.txt", "w", encoding="utf-8")
for i in range(20001):
    p = random.randint(79, 159)
    s = str(random.randint(1, 9))
    for i in range(p):
        s += str(random.randint(0, 9))
    v = true_numm(s)
    print(s, v)
    f.write(str(s)+","喵+"\n")
f.close()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
秤杆不平衡秤杆不平衡

程序是可以正常运行的,但是输出的数字可能有误。

反馈格式:错误数字:114514,输出汉字数字:十一万四千零五百十四(错误处(可以不写):在四千和五百之间多了个零,五百十四应为五百一十四)

点赞0


评论


秤杆不平衡秤杆不平衡

各位帮我找出错误数字,这对我来说非常重要!球球了!

点赞0


评论