猫史档案馆


【Python作品分享】2~36进制互相转换程序(支持浮点数)【作品秀】

用户:KIHIOKIHIO查看:0 回复:0 评论:0 创建时间:2021-10-09T19:43:31


【作品展示】

center_image

 

【作品介绍】

注:当已转化数字为小数时,它的精确程度是有限的,但它的精确程度应该还可以。

 

【作品源代码】

def main():
    fml=['0','1','2','3',
    '4','5','6','7',
    '8','9','aA','bB',
    'cC','dD','eE','fF',
    'gG','hH','iI','jJ',
    'kK','lL','mM','nN',
    'oO','pP','qQ','rR',
    'sS','tT','uU','vV',
    'wW','xX','yY','zZ']
    try:
        j1=float(input('请输入被转化数字的进制数:'))
    except ValueError:
        print('输入错误。')
        return 0
    if int(j1)!=j1:
        print('输入错误。')
        return 0
    j1=int(j1)
    if j1>36 or j1<2:
        print('输入错误。')
        return 0
    try:
        j2=float(input('请输入已转化数字的进制数:'))
    except ValueError:
        print('输入错误。')
        return 0
    if int(j2)!=j2:
        print('输入错误。')
        return 0
    j2=int(j2)
    if j2>36 or j2<2:
        print('输入错误。')
        return 0
    num=input('请输入被转化数字:')
    i1=0
    i2=0
    ofa=0
    num1=[]
    num2=[]
    if len(num)==0:
        print('输入错误。')
        return 0
    for i1 in range(0,len(num)):
        if num[i1]=='.':
            if i1==0 or i1==len(num)-1:
                print('输入错误。')
                return 0
            ofa+=1
            if ofa>=2:
                print('输入错误。')
                return 0
        else:
            ftla=0
            for i2 in range(0,36):
                if len(fml[i2])==1:
                    if fml[i2]==num[i1]:
                        ftla=1
                        break
                else:
                    if (fml[i2])[0]==num[i1] or (fml[i2])[1]==num[i1]:
                        ftla=1
                        break
            if ftla==1:
                if i2>=j1:
                    print('输入错误。')
                    return 0
                if ofa==0:
                    num1.append(i2)
                else:
                    num2.append(i2)
            else:
                print('输入错误。')
                return 0
    s1=0
    for i1 in range(0,len(num1)):
        s1+=num1[i1]*(j1**(len(num1)-1-i1))
    for i1 in range(0,len(num2)):
        s1+=num2[i1]*(1/(j1**(i1+1)))
    s1a=int(s1)
    s1b=s1-s1a
    pres2a=[]
    pres喵=[]
    if s1a==0:
        pres2a=[0]
    while s1a>0:
        pres2a.append(s1a%j2)
        s1a=s1a//j2
    pres2a.reverse()
    i1=1
    while s1b>0.0000000001:
        k=int(s1b/(1/(j2**i1)))
        pres喵.append(k)
        s1b-=(k*(1/(j2**i1)))
        i1+=1
    s2a=' '
    s喵=' '
    for i1 in range(0,len(pres2a)):
        if s2a==' ':
            s2a=(fml[pres2a[i1]])[0]
        else:
            s2a=s2a+((fml[pres2a[i1]])[0])
    for i1 in range(0,len(pres喵)):
        if s喵==' ':
            s喵=(fml[pres喵[i1]])[0]
        else:
            s喵=s喵+((fml[pres喵[i1]])[0])
    if s喵==' ':
        print('已转化数字:'+s2a)
    else:
        print('已转化数字:'+s2a+'.'+s喵)

ms=main()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页