我之前写过十进制与二进制之间的转换:
十进制浮点数转化为二进制的Python代码
十进制整数转化为r进制数
- 程序功能为:输入十进制整数和欲转换的进制数r,将十进制转换为r进制。
编程思想为:调用函数DToR,逐位求模。若该位为大于9的数,则以字母代表(提示:大写字母’A’的ASCII码值等于65);若该位为9以下的数,则转换为字符格式。从低位至高位连接字符串并返回结果。如下图所示:
代码:
def DToR(m,r):
t=''
while m!=0 and r!=0:
c=m % r #求模
if (c>9):
t=chr(c-10+65)+t
else:
t=chr(c+48)+t
m = m // r #整除
return t
while True:
ipt=input("请输入十进制整数('q' 退出程序):\n")
if ipt=='q':
break
r=int(input("请输入欲转换进制(如2,8,16等):\n"))
rst=DToR(int(ipt),r)
print('将%s转换为%d进制的结果为:%s' %(ipt,r,rst))
结果:
请输入十进制整数('q' 退出程序):
12
请输入欲转换进制(如2,8,16等):
2
将12转换为2进制的结果为:1100
请输入十进制整数('q' 退出程序):
255
请输入欲转换进制(如2,8,16等):
16
将255转换为16进制的结果为:FF
请输入十进制整数('q' 退出程序):
16
请输入欲转换进制(如2,8,16等):
8
将16转换为8进制的结果为:20
请输入十进制整数('q' 退出程序):
q
关于chr()与ord()的知识:
python中chr()函数和ord()函数的用法
参考的代码
def hashFuc(x, y): #x是数字,y是进制
if y < 10:
z = []
while x != 0:
z.append(x % y)
x = x // y
result = z[::-1]
else:
k = []
z = []
while x != 0:
z.append(x % y)
x = x // y
for i in range(len(z)):
if z[i] >= 10:
z[i] = z[i] - 10 + ord('A')
elif z[i] <= 9 and z[i] >= 0:
z[i] = z[i] + ord('0')
for i in range(len(z)):
k.append(chr(z[i]))
result = k[::-1]
for i in range(len(result)):
print(result[i], end='')
print('\n')
while True:
a = int(input("输入一个数字"))
b = int(input("输入进制数:"))
hashFuc(a, b)
结果:
输入一个数字12
输入进制数:2
1100
输入一个数字255
输入进制数:16
FF
输入一个数字16
输入进制数:8
20
输入一个数字