Python常用进制转换
- 问题描述
- 解决方法
- 进制转换函数
- 具体方案
- 先将非十进制转成十进制
- 再将十进制转换成其他进制
- 数据处理
- 切片
- format
问题描述
进制转换的问题有很多描述,以下是蓝桥杯里三道题的描述:
- 给定n个十六进制正整数,输出它们对应的八进制数。
- 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
- 给出一个非负整数,将它表示成十六进制的形式。
每道题的输入格式可能不太一样,但是解决思路都是通用的。
我们也可以拓展一下题目,实现常用的进制转换。
解决方法
Python有内置的进制转换函数,这在进制转换上是很方便的。但是在进制转换后,有些转换结果都带有前缀,我们需要对结果做一些处理,处理方法有两种:
- 一种是通过切片的方法
- 另一种方法是使用format方法
进制转换函数
我们可以使用python内置的进制转换函数实现进制转换。
但是,除了int()方法,其他进制转换函数都有一个前提,那就是输入10进制数。
- int() :转换成十进制
- bin() :转换成二进制
- oct() :转换成八进制
- hex():转换成十六进制
具体方案
先将非十进制转成十进制
因为进制转换函数的前提是输入十进制数,所以我们首先要做的就是先把输入转换成十进制数。
转换成十进制需要的就是int()方法,在转换前,我们需要确定int()方法的两个参数:
- int(input(), value):input()指输入,value指输入的数制
举个例子:
n = int(input(), 2) # 输入二进制,输出十进制
n = int(input(), 8) # 输入八进制,输出十进制
n = int(input(), 16) # 输入十六进制,输出十进制
再将十进制转换成其他进制
转换成其他进制的方法用到的是下面三个方法:
num = bin(n) # 转换成二进制
num = oct(n) # 转换成八进制
num = hex(n) # 转换成十六进制
但是转换以后,都带有前缀,如: 0b、0o、0x
这时我们只需要做一下数据处理即可
数据处理
这里有两种解决方案,一种是用切片,另一种是用format方法
切片
print(oct(n)[2:])
如果从1开始计数的话,其实就是从第3位开始取到最后
format
- 在format的槽中添加一个"b",等价于实现了bin函数的功能
- 对八进制的转换使用 “o”, 等价于实现了oct函数的功能
- 转成十六进制用 “x”, 等价于实现了hex函数的功能
print("{:o}".format(n))