关于python(3.7)的问题

编写一个程序,使用三位一并,四位一并法,将输入的八进制小数转化为二进制再转化为十六进制。如输入16.71(八进制)先输出001110.111001再输出E.E4。求具体代码

第1个回答  2019-10-15

def o2b2h(o):

    o2b_dic={"0":"000","1":"001","2":"010","3":"011",

             "4":"100","5":"101","6":"110","7":"111"}

    b2h_dic = {"0000": "0", "0001": "1", "0010": "2", "0011": "3", "0100": "4", "0101": "5",

               "0110": "6", "0111": "7", "1000": "8", "1001": "9", "1010": "A",

               "1011": "B", "1100": "C", "1101": "D", "1110": "E", "1111": "F"}

    o=str(o).split(".")

    b=""

    for i in o[0]:

        b+=o2b_dic[i]

    if len(o)>1:

        b+="."

        for i in o[1]:

            b+=o2b_dic[i]

    b_re = b.strip("0")


    b=b.split(".")

    b[0]=(4-len(b[0])%4)*"0"+b[0]

    h=""

    for i in range(0,len(b[0])-3,4):

        h+=b2h_dic[b[0][i:i+4]]

    if len(b)>1:

        h+="."

        b[1]+=(4-len(b[1])%4)*"0"

        for i in range(0, len(b[1]) - 3, 4):

            h += b2h_dic[b[1][i:i + 4]]

    h_re= h.strip("0")


    return b_re,h_re



if __name__ == '__main__':

    print(o2b2h(16.71))



运行结果:

望采纳

本回答被提问者和网友采纳
相似回答