蓝桥杯-基础练习-十六进制转八进制(Python)AC代码及注释(内含Pyhton进制转换详解)

题目

问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。


输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0-9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
  
输出格式
  输出n行,每行为输入对应的八进制正整数。
  
【注意】
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC
样例输出
  71
  4435274  
【提示】
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

代码及注释:

#执行的代码
n=int(input())
for i in range(n):
    if n<=10:
        s=input()#所有输入默认字符串
        if len(s)<=100000:
            res_1=int(s,16)#这里的int(s,16)代表把16进制的s转化成10进制
            res_2=oct(res_1)#这里的oct代表把一个整数转化为八进制
            print(res_2[2:])#这里的[2:]是代表结果从第三位开始输出
#下方是关于进制转换的一些信息,刚上手Python建议读一下       
'''本题目可以将输入的16进制数转化为某进制,再将某进制转化为8进制,
于是我在这里拓展一下进制转化的一些方法:
在python中二进制用0b加相应数字来表示,8进制用0o加相应数字来表示,16进制用0x加相应数字来表示。即:
#其他进制转换二进制#
>>> bin(2)  #十进制转换二进制#
'0b10'
>>> bin(0o10) #八进制转换二进制#
'0b1000'
>>> bin(0xf) #十六进制转换二进制#
'0b1111'
 
#其他进制转换为八进制#
>>> oct(0b101)
'0o5'
>>> oct(0xf)
'0o17'
>>> oct(0o123)
'0o123'
 
#其他进制转换为十六进制#
>>> hex(0o10)
'0x8'
>>> hex(3)
'0x3'
>>> hex(0b111)
'0x7'
 '''
'''
#其他进制转换为十进制#
>>> int(0o10)
8
>>> int(0xf)
15
>>> int(0b10)
2
'''

青春,热泪盈眶

评论里面主要有两点问题
一是:输出格式跟题目要求不一致,确实我的输出不严谨,但我的代码输出是可以AC的。
更为严谨的代码由评论区用户七月_Lillian(感谢)给出如下,思路就是将我代码中的所有res_2添加到列表li统一输出:

n=int(input())
li=[]
for i in range(n):
    if n<=10:
        s=input()#所有输入默认字符串
        if len(s)<=100000:
            res_1=int(s,16)#这里的int(s,16)代表把16进制的s转化成10进制
            res_2=oct(res_1)#这里的oct代表把一个整数转化为八进制
            li.append(res_2[2:])#这里的[2:]是代表结果从第三位开始取
for i in li:
    print(i,end='\n')

二是代码line9为什么结果从第三位输出,而且为什么 直接16到8不行?res_1=oct(s)这样?
答:1.为什么结果从第三位输出,因为oct()函数转换完会有前缀’0o’代表该数是八进制数,题目要求不能出现前缀; 2.直接16进制转换为8进制不行吗?可以直接转换啊,在这里因为题目规定输入的时候不能带有前缀,所以我觉得要想直接16转8还要加前缀‘0x’,不如通过16转10,10转8来的简单。

  • 49
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值