Python蓝桥杯 数列排序 十六进制转八进制

学习内容:

①map函数 把后面参数变成前面的形式   ②输出end=' '不换行

③python空列表不能直接赋值,要用append

④oct函数,其他进制转换成8进制,hex函数,其他进制转化成十六进制但都带前置0

⑤任何数转换成10进制用int(str,进制)注意第一个参数是str

问题描述

  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

输入格式

  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式

  输出一行,按从小到大的顺序输出排序后的数列。

样例输入

        5
        8 3 6 4 9

样例输出

        3 4 6 8 9

n=int(input())
if(n>=1 & n<=200):
    list_1=list(input().split())
    list_1.sort()
for i in range(len(list_1)):
    print(list_1[i],end=' ')

只得了14分,不完全正确。:(

注: ①end=' '表示输出不换行                           ②split()后面可以不加东西,list直接生成一个列表

        ③sort函数默认reverse=False从小到大输出,reverse=True则相反

大佬代码:

n=int(input())
if n>=1 and n<=200:
   sl=list(map(int,input().split()))
   sl.sort()
   for i in range(len(sl)):
       print(sl[i],end=' ')

注:①map函数:map() 会根据提供的函数对指定序列做映射。 本题就是会把str转换成int

        >>>map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
        [1, 4, 9, 16, 25]             
       

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

输入格式
  输入的第一行为一个正整数n (1<=n<=10)
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000

输出格式
  输出n行,每行为输入对应的八进制正整数。
【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274
 

提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

第一遍代码:

n=int(input())
s16=[]
s8=[]
for i in range(n):
    x16[i]=int(input())
for i in range(len(s16)):
    s8[i]=oct(s16[i])
for ele in s8:
    print(ele)

问题:在python中二进制用0b加相应数字来表示,8进制用0o加相应数字来表示,16进制用0x加相应数字来表示。存在前置0

其他进制转换为八进制                                                                                                                    # >>> oct(0b101)       '0o5'                                                                                                                  >>> oct(0xf)           '0o17'                                                                                                                  >>> oct(0o123)     '0o123'    而这道题不允许出现前置0,所以只能借助int十进制转换

第二版代码:

n=int(input())
s16=[]
s8=[]
for i in range(n):
    x16[i]=int(input())
for i in range(len(s16)):
    m=int(s16[i],16)
    s8[i]=oct(m)
for ele in s8:
    print(ele)

问题:①忽略了题目中的小细节 !!!n大于等1小于等于10,十六进制数不超过100000!!

        ②python不支持对空列表赋值,只能用append!!

        ③输出的时候记得把0o排除了 从第三位开始输出

第三版代码:

n=int(input())
s16=[]
if (n<=10 and n>=1):
    for i in range(n):
        s16.append(int(input()))
for i in range(len(s16)):
    if(s16[i]<=100000):
        m=int(s16[i],16)
        mm=oct(m)
        print(mm[2:])

报错:TypeError: int() can't convert non-string with explicit base

原因:进制转换 int后面第一个参数得是str

其他错误:append那里 传进来的是十六进制 所以不能加int(10进制),而且不是数字大小和100000比,而是长度和100000比

最后代码:

n=int(input())
s16=[]
s8=[]
if (n<=10 and n>=1):
    for i in range(n):
        s16.append(input())
for i in range(len(s16)):
    if(len(s16[i])<=100000):
        m=int(str(s16[i]),16)
        mm=oct(m)
        # print(mm[2:])
        s8.append(mm[2:])
for ele in s8:
    print(ele)


#大佬代码
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')

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值