以下是本人的代码块,可运行,小白可以看看思路,也希望大佬可以在本人的基础上在进行一点修改,谢谢!
# 十六进制转换
a = input('输入一个十六进制数') # 输入一个十六进制数字
b = [] # 存储输入的十六进制数字
c = '' # 空的字符串用来放置十六进制转换后的二进制
d = [] # 存储c
for i in a: # 放入
b.append(i)
while b[0] == '0' and len(b) > 1: # 如果说输入的第一个数字是0就进行删除,没有前置0
b.remove('0') # 进行删除
for j in range(len(b)): # 循环
if 'A' <= b[j] <= 'F': # 十六进制10是A,11是B以此类推
b[j] = str(ord(b[j]) - 55) # 利用Ascll码对字母进行一个置换变成数字
for z in range(4): # 十六进制数用四位2进制数字表示所以循环四次
if int(b[j]) != 0: # 对它进行二进制转换运算,简单的一个取2求余
c += str(int(b[j]) % 2)
b[j] = str(int(b[j]) // 2)
else: # 当它为0的时候,就会在前面添加0
c += '0'
d.append(c[::-1]) # 将一个二进制数字放入到列表存储
c = '' # 四个二进制数字后变回原样再次重新进行进行放入
elif '1' <= b[j] <= '9': # 字母和数字分开,因为我输入的是一个字符串所以不能开始就整型
for z in range(4): # 与上面同理
if int(b[j]) != 0:
c += str(int(b[j]) % 2)
b[j] = str(int(b[j]) // 2)
else:
c += '0'
d.append(c[::-1])
c = ''
else: # 输入的不是十六进制数字就是错误的
print('输入错误')
# print(d) 对上面的二进制数字进行返回
f = ''
zero = '0' # 由于一位十六进制分割后会是四位二进制数字,而八进制是三位二进制数字,所以我们需要在前面补0
for i in d: # 进入列表,将列表的每个二进制数字放到一个字符串里进行判断
f += i # 添加
while len(f) % 3 != 0: # 三位,所以对于3求余,余数为0就会停止加入0
zero += f
f = zero
zero = '0'
list2 = [] # 放置八进制数字
m = ''
num = 0
for i in range(len(f) // 3): # 循环,每次抓取三个二进制数字放入到list2的列表中
for j in range(3): # 3次
m += f[num] # 加入
num += 1 # +1
list2.append(m) # 添加
m = '' # 循环结束,变回原样准备下一次
# print(list2) 测试
for i in list2: # 进入每个都是三位的二进制数字中
x = 0 # 进行一个较为简单的转换
for j in range(1): # 进行一次三个判断
if i[j] == '1':
x += 4
if i[j + 1] == '1':
x += 2
if i[j + 2] == '1':
x += 1
m += str(x) # 加入到m
if m[0] == '0': # 第一位不可以为0,因为有些分割后变成000,001这种
m = m[1:]
print(m)