学习内容:
①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')