Python每日一练:进制转换
1.题目描述:十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0-9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
解题思路
- 题目中提到不可以有前导0,也就是说二进制前面不需要加0o,八进制前面不需要加0x,而且16进制不需要加ox;
- 那么就16进制转化为8进制的话,可以先转十进制再转八进制,因为如果16直接转8进制,前面需要+0x,这样会比比较复杂,不如先转10进制。
- 转十六进制:
a=hex(2)
0x2 - 转十进制:
a = int(s,16)
这里的int(s,16)代表把16进制的s转化成10进制 这里特别要注意其中的s必须为字符串
,如果你在其中不加任何设定的输入数字的话,他会自动认定为整数,这样肯定会报错的,所以说你可以使用引号或者将前面加上str()去进行一个字符串的转化:a = int(str(3),16) print(a)
- 转八进制:
a=oct(2)
0o2 - 转二进制:
a=bin(2)
0b10 - 回到原题,再进行十六进制转化十进制后,我们需要利用oct()将十进制转化为八进制,这里的八进制转化后,是带有前缀0o的,所以说我们需要取其从第三位开始的数据,即字符串切分处理:
list1.append(b[2:])
源码分享
# @Time : 2022/3/28 9:34
# @Author : 是Dream呀
# @File : 进制问题:16转8.py
n = int(input())
list1 = []
for i in range(n):
if n <= 10:
s = input()
if len(s) <= 100000:
a = int(s,16) # 先转十进制再转八进制,因为如果16直接转8进制,前面需要+0x,这样会比比较复杂,不如先转10进制。
b = oct(a) # 转八进制
list1.append(b[2:]) # 转完之后的8进制前面是还有0o,需要从第三位开始取值
for i in list1:
print(i)
2.题目描述:十进制转十六进制
源码分享
在这里,我们需要用到.upper()和.lower()方法,去将转化后的字母进行大写处理,因为默认转置之后的字母都是小写的,需要我们用 upper()
函数进行大写处理,然后再进行切分处理。
# @Time : 2022/3/28 9:51
# @Author : 是Dream呀
# @File : 进制问题:10转16.py
n = int(input())
a = hex(n).upper() # .upper()将字符串中的小写字符自动转化为大写,lower()方法可将字符串中的所有大写字母变为小写
# 如果不进行小写转大写转换的话,10进制转16进制,默认转化为小写字母形式。
print(a[2:])
3.题目描述:十六进制转十进制
源码分享
int(str1,16)表示把一个16进制的数转化为10进制,其中的16可以为8或者2表示在不同的进制中进行转换。
# @Time : 2022/3/28 9:49
# @Author : 是Dream呀
# @File : 进制问题:16转10.py
str = input()
print(int(str,16)) # int(str1,16)表示把一个16进制的数转化为10进制,其中的16可以为8或者2表示在不同的进制中进行转换。
学习总结
🌲🌲🌲 最后,作者很感谢能够阅读到这里的读者。如果看完觉得好的话,还请轻轻点一下赞或者分享给更多的人,你们的鼓励就是作者继续行文的动力。
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了,我们下期再见~