代码如下:
# - * - 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)
运行展示: