python实现十六进制,二进制,十进制之间的进制转换

代码如下:

# - * - coding:utf-8 -*-
from pickle import FALSE
from re import A
import time

#二进制转化为十进制
def btod (lst):
    sum=0
    i=0
    flag=0
    for item in lst:
        i+=1
        if(item=='.'):
            flag=1
            break
    n=i
    if(flag==0):
       i=len(lst)-1
    else:
        i=i-2
    l=i
    while(i>=0):
        sum=sum+int(lst[i])*2**int(l-i)
        i-=1
    if(flag==1):
        sum1=0
        e=-1
        for a in range(n,len(lst)):
            sum1=float(int(lst[a])*2**e)+sum1
            e-=1
        sum=sum+float(sum1)
    return sum

#十进制转化为十六进制
def dtoh(num):
    lst=[]
    i=0
    while(num//(16**i)!=0):
        i+=1
    n=i
    while(n>0):
        num1=num//(16**(n-1))
        h9(num1,lst)
        num=num%(16**(n-1))
        n-=1
    str1=''.join(lst)
    print(str1,end='')

#方便十六进制转换的几个小函数
def h16(num,lst):
    if(num==10):
        lst.append('A')
    elif(num==11):
        lst.append('B')
    elif(num==12):
        lst.append('C')
    elif(num==13):
        lst.append('D')
    elif(num==14):
        lst.append('E')
    elif(num==15):
        lst.append('F')
def h9(num,lst):
     if(num<=9):
        lst.append(str(num))
     elif(num>9&num<16):
        h16(num,lst)

#十六进制转化为十进制:
def htod(lst):
    htod16={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,
            '7':7,'8':8,'9':9,'A':10,'B':11,
            'C':12,'D':13,'E':14,'F':15,'0':0}
    i=0
    flag=0
    for item in lst:
        i+=1
        if(item=='.'):
            flag=1
            break
    x=i
    if(flag==0):
        n=len(lst)-1
    else:
        n=i-2
    l=n
    num=0
    while(n>=0):
        num=htod16[lst[n]]*16**(l-n)+num
        n-=1
    sum1=0
    if(flag==1):
        e=-1
        for a in range(x,len(lst)):
            sum1=float(htod16[lst[a]]*16**e)+sum1
            e-=1    
        num=float(num+sum1)
    return num

#十进制转化为二进制
def dtob(num):
    lst=[]
    a=0
    while(num>0):
       if(num%2==1):
         lst.append(1)
       else:
         lst.append(0)
       num=num//2
       a+=1
    lst.reverse()
    str1=''.join(map(str,lst))
    print(str1,end='')

#小数部分转换为二进制
def floatdtob(num1):
    lst=[]
    for i in range(8):
        num1=2*num1
        if(num1>=1):
            lst.append(1)
            num1=num1-1
        else:
            lst.append(0)
    str2=''.join(map(str,lst))
    print(str2)

#小数部分转换为十六进制
def floatdtoh(num1):
    lst=[]
    htod16={'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,
            '7':7,'8':8,'9':9,'A':10,'B':11,
            'C':12,'D':13,'E':14,'F':15,'0':0}
    htodfloat16={value:key for key,value in htod16.items()}
    for i in range(8):
        num1=16*num1
        lst.append(htodfloat16[int(num1)])
        num1=float(num1-int(num1))
    str1=''.join(lst)
    print(str1)

#以下为用户交交互界面
print('本程序为进制转化器,支持十六进制,十进制,二进制之间的相互转化\n')
print('version:1.4\n')
print('本次更新:\n支持各进制小数的转换\n修复了二进制数前后颠倒的bug\n减少了输出次数')
while(1):
    print('\n请选择您要转化的数据,并表明数据种类  b.二进制  d.十进制  h.十六进制')
    i=str(input())
    lst1=list(i)
    num3=len(lst1)-1
    i=lst1[num3]

    if(i=='b'):
        lst=[]
        del lst1[num3]
        lst=lst1
        flag=0
        for i in lst:
            if(i=='1' or i=='0' or i=='.'):
                flag=0
            else:
                print('请输入正确的二进制数!\n')
                flag=1
                break
        if(flag==1):
            continue
        num=btod(lst)
    elif(i=='h'):
        lst=[]
        del lst1[num3]
        lst=lst1
        lst=''.join(lst).upper()
        num=htod(lst)
    elif(i=='d'):
        del lst1[num3]
        lst=lst1
        num=float(''.join(lst))
        num=float(input())
    print('\n转化后的十进制数为: ',end='')
    print(num)
    print('转化后的十六进制数为:',end='')
    num1=float(num-num//1)
    num=int(num)
    dtoh(int(num))
    if(num1!=0):
            if(num==0):
                print('0.',end='')
            else:
                print('.',end='')
            floatdtoh(num1)
    print('\n转化后的二进制数为:',end='')
    num1=float(num-num//1)
    num=int(num)
    dtob(num)
    if(num1!=0):
            if(num==0):
                print('0.',end='')
            else:
                print('.',end='')
            floatdtob(num1)
    print('\n\n请选择继续or退出:\n a.继续\n b.退出')
    a=input()
    if(a=='b'):
        break

import time
for i in range(10):
    print("\r离程序退出还剩%s秒" % (9-i), end="")
    time.sleep(1)

运行展示:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值