hbu-xiaopipi

大佬们看一下那有不足,皮皮在此谢过了。

def  bTod (a,p=4):
    \'\'\'
    bTod(...)
    bTod(string,integer)
    input: String only contains numeric characters  or  points or minus  sign, the string represents  a binary  number.And the integer is used  to determine the accuracy  of  the  output  data.
    process: Converts  the  binary number that this string  represents  to  a  decimal  number .
    output: Print  the  result(decimal  number) that determines  the  accuracy.
    \'\'\'
    p=int(p)
    sign=\'\'
    if a[0]==\'-\':
        sign=a[0]
        a=a[1:]
    ithpower=0
    intsum=0
    floatsum=0
    for c in a:
        if c not in (\'1\',\'0\',\'.\'):
            print("输入的数值不是二进制数")
            return 0
    if  a.count(".")>1:
        print("输入错误")
        return 0   
    elif a.count(".")==1:
        cut=a.split(".")
        pointbefore=cut[0]
        pointbefore=pointbefore[::-1]
        pointafter=cut[1]
    else :
        pointbefore=a[::-1]
        pointafter="0"
    for c in pointbefore:
        intsum=intsum+ int(c)*(2**ithpower)
        ithpower=ithpower+1
    ithpower=-1    
    for  c  in  pointafter:
        floatsum=floatsum+int(c)*(2**ithpower)
        ithpower=ithpower-1
    result=intsum+floatsum
    print("二进制数{}转变成十进制数保留{}位小数的结果是{}{:.{}f}" .format(a,p,sign,result,p))
def  dTob(a,p=4):
    \'\'\'
    bTod(...)
    bTod(string,integer)
    input: String only contains numeric characters  or  points  or  minus  sign, the string represents  a decimal  number.And the integer is used  to determine the accuracy  of  the  output  data.
    process: Converts  the decimal number that this string  represents  to  a binary  number .
    output: Print  the  result(binary  number) that determines  the  accuracy.
    \'\'\'
    p=int(p)
    times=0 
    sign=\'\'
    if a[0]==\'-\':
        sign=a[0]
        a=a[1:]
    for c in  a:
        if  (c<\'0\' or c>\'9\') and c!=\'.\':
            print("输入错误")
            return  0
    if  a.count(".")>1:
        print("输入错误")
        return  0
    elif a.count(\'.\')==1:
        cut=a.split(".")
        pointafter=float("0."+cut[1])
        auto=bin(int(cut[0]))
        intsum=auto[2:]
        floatsum=\'\'
        times=0
        while pointafter :
            t=pointafter*2
            if t<1:
                floatsum=floatsum+\'0\'
                pointafter=pointafter*2
                times=times+1
            else:
                floatsum=floatsum+\'1\'
                pointafter=t-1
                times=times+1
            if  times >500:
                print("转化后的小数为无限小数")
                break
        if len(floatsum)>p:
            floatsum=floatsum[:p]
        elif len(floatsum)<p:
            floatsum=floatsum+\'0\'*(p-len(floatsum))
        else:
            floatsum=floatsum
        result=intsum+\'.\'+floatsum      
        print("十进制数{}转化为二进制数保留{}位小数的结果是{}{}" .format(a,p,sign,result))    
    else :
        p=int(p)
        auto=bin(int(a))
        result=auto[2:]+\'.\'+\'0\'*p      
        print("十进制数{}转化为二进制数保留{}位小数的结果是{}{}" .format(a,p,sign,result))
                
print("请在输入数字前加上数字类型(十进制为d、二进制为b,默认为十进制转二进制,默认精度为小数点后四位),q退出程序")
while 1:
    n=input("请输入要转换的内容:")
    if n==\'q\':
        print("程序退出")
        break
    else:
        pole=1
        while  pole :
            s=input("请输入精度:")
            if s==\'\':
                s=4
                break
            for  c in s:
                if \'0\'<=c<=\'9\':
                    pole=0
                else:
                    print("精度输入错误")
                    pole=1
                    break     
        if  n==\'\':
            print("输入错误")
        elif n[0]==\'d\':
            dTob(n[1:],s)
        elif \'0\' <=n[0]<=\'9\'  or  n[0]==\'-\':
            dTob(n,s)
        elif n[0]==\'b\':
            bTod(n[1:],s)
        else:
            print("输入错误")
            
        
                 
                

 

分类:

技术点:

相关文章:

  • 2021-09-27
  • 2021-11-21
  • 2021-11-28
  • 2021-09-27
  • 2021-11-21
  • 2021-10-10
猜你喜欢
  • 2021-11-21
  • 2021-09-27
  • 2021-11-21
  • 2021-09-27
  • 2021-12-02
  • 2021-07-11
相关资源
相似解决方案