内容正文:
青少年软件编程(Python)等级考试试卷(三级)
202309真题与解析
分数:100 题数:37 测试时长:60分钟
1、 单选题(共25题,共50分)
1. 有一组数据存在列表中,things=["桌子","椅子","茶几","沙发","西瓜","苹果","草莓","香蕉"],若想要输出其中的水果数据,则下列处理恰当的是?()(2分)
A.print(things)
B.print(things[:4])
C.print(things[4:])
D.print(things[5:8])
2. 学期末学校进行了体育测试,其中跳绳项目每人有三次机会,取最好的成绩为最后得分。小贝、小李和小司三人的成绩数据如下:tscores=[["小贝",132,126,130],["小李",117,120,123],["小司",129,140,137]],那么要得到小贝的第二次成绩,下列操作正确的是?()(2分)
A.tscores[0][2]
B.tscores[1][1]
C.tscores[0[2]]
D.tscores[1[1]]
3.小贝、小李和小司三人三次跳绳的成绩数据如下:tscores=[["小贝",132,126,130],["小李",117,120,123],["小司",129,140,137]],若要输出小李同学的最好成绩,则正确的处理方式是?()(2分)
A.max(tscores[1])
B.max(tscores[1][1:])
C.tscores[1].max()
D.tscores[1][1: ].max()
4. 有如下代码:
gs=['众鸟高飞尽','孤云独去闲','相看两不厌','只有敬亭山']
f=open('jts.txt','w')
f.write(','.join(gs)+'
')
f.close()
有关于上述代码,正确的说法是?()(2分)
A.在执行代码前,必须要先新建一个"jts.txt"的文件
B.在文件"jts.txt"中,所有相邻诗句之间将发生换行
C.f.write(','.join(gs)+'
')也可以用f.write('
'.join(gs)+',')替换,显示结果是相同的
D.该段代码的主要功能是将列表gs中的四句古诗写入到"jts.txt"文件中,诗句之间以逗号连成一行
5. 有关于简单文件的读写,下列说法正确的是?( )(2分)
A.可以用Python内置的open()函数打开文件
B.对文件进行读取操作,我们可以用write()函数
C.对文件进行写入操作,我们可以用close()函数
D.关闭文件可以用read()函数
6. 运行函数 hex(?) 之后,得到结果是'0xa',请问括号中?号处应填?()(2分)
A."9"
B.9
C."10"
D.10
7. 十六进制数100,对应的十进制数是?( )(2分)
A.128
B.256
C.28
D.56
8. int()函数可以将非十进制数或数字字符串转换为十进制数,以下关于int()函数的使用,正确的是?( )(2分)
A.int("0b1010",10)
B.int("1010",10)
C.int("0o50",10)
D.int("80",8)
9. 下列4个表达式中,答案不是整数6的是?( )(2分)
A.abs(-6)
B.int(6.88)
C.round(5.55)
D.min(float(6),9,8,7)
10. 键盘输入“杭州亚运会即将于2023年9月23日至10月8日举办。”,以下代码的输出结果是?( )(2分)
try:
n=input("请输入文字:")
x=n.count("2")
print(x)
except:
print("程序执行错误")
A.程序执行错误
B.2
C.3
D.15
11. 初学者常采用异常处理解决程序中出现的意外情况,下面语句的执行结果是?()(2分)
try:
s1 = '我爱中国'
s2 = 2023
s = s1 + s2
print(s)
except:
print('错误')
finally:
print('程序结束')
A.
我爱中国2023
程序结束
B.
错误
程序结束
C.我爱中国2023
D.错误
12. 列表中有6个数据,使用冒泡排序算法进行从小到大排序,最多需要处理几遍?( )(2分)
A.3
B.4
C.5
D.6
13. 对一组数据[5, 2, 6, 4, 8, 1, 7, 3]进行排序,使用冒泡排序按从大到小的顺序进行排列,则第2轮排序过后的结果是?( )(2分)
A.2, 4, 5, 1, 6, 3, 7, 8
B.6, 5, 8, 4, 7, 3, 2, 1
C.5, 6, 4, 8, 2, 7, 3, 1
D.5, 6, 4, 8, 7, 3, 2, 1
14. 想要找出小于100的所有质数,适用的算法是?()(2分)
A.解析算法
B.枚举算法
C.对分查找
D.选择排序
15. 运行下面的程序,结果是?()(2分)
h=[-2,-1,0,1,2,3]
n=len(h)
s=0
for i in range(n):
s=s+bool(h[i])
print(s)
A.0
B.1
C.5
D.6
16. 关于Python中abs()函数,描述不正确的是?( )(2分)
A.abs()函数的功能是取一个整数的绝对值
B.abs(0)的运行结果是0
C.abs(3.0)的运行结果是3.0
D.abs(-3)的运行结果是3
17. print(divmod(29,7))的运行结果是?( )(2分)
A.4, 1
B.(4, 1)
C.1, 4
D. (1, 4)
18. 下列程序运行结果是 False的是?( )(2分)
A.print(all(['1','2','3']))
B.print(all(()))
C.print(all(('1','2','3','4','5')))
D.print(all(['1','2','3','']))
19. 下列程序运行的结果是?( )
h=[2,-3,-5,-6,0,-1,4,9]
y=list(filter(None,h))
print(y)
A.[2, -3, -5, -6, -1, 4, 9]
B.(2, -3, -5, -6, -1, 4, 9)
C.[2, 4, 9]
D.(2, 4, 9)
20. 关于open()函数的参数,下列描述不正确的是?( )(2分)
A.'r'以只读方式打开文件,如果文件不存在,则会提示错误
B.'w'以写入的方式打开文件,如果文件不存在,则会提示错误
C.'a'打开文件,并将新内容写入到已有内容之后
D.'r+'以读、写方式打开文件
21. Python语句print(ascii('A')+ascii('Z')) 运行的结果是?( )(2分)
A.'A'+'Z'
B.'AZ'
C.'A''Z'
D."AZ"
22. 执行 print('{:.1f}'.format(23.792)) 返回的结果是?( )(2分)
A.23
B.23.0
C.23.8
D.23.792
23. 以下表达式的值为True的是?( )(2分)
A.bool([])
B.bool("0")
C.bool(None)
D.bool(range(0))
24. 下面程序运行的结果是?()(2分)
a='hello python'
print(a,end='_')
print(a,end="")
print(a)
A.
hello python_
hello pythonhello python
B.
hello python_hello pythonhello python
C.
hello python_hello python hello python
D.
hello python_hellopythonhellopython
25. 小明运行下面的程序,运行结果正确的是?()(2分)
h=[6,15,1,0,7,9,5]
p=sorted(h)
print(p)
A.(0, 1, 5, 6, 7, 9, 15)
B.(15, 9, 7, 6, 5, 1, 0)
C.[0, 1, 5, 6, 7, 9, 15]
D.[15, 9, 7, 6, 5, 1, 0]
二、判断题(共10题,共20分)
26. 在计算机中,每个二进制位都可以表示为 0 或 1 两个值。( )
27. 有这样一个表达式: ord('a') - ord('A') ,这个表达式运行的结果是整数 32 ,请判断结果对吗?( )
28. 对文件操作需要先打开文件,打开文件的模式只有'r'和'w',即只读和只写。( )
29. 有如下函数:
with open("english.txt",'r')as f:
list1=f.readlines()
print(list1)
这段函数的功能是自动将"english.txt"文件中的内容获取成一个行的列表并输出。( )
30.关于语句f=open('d:/a.txt', 'r'),如果文件a.txt不存在,不会报错。()
31. 键盘输入整数8,以下代码的运行结果是4.0。( )
try:
n = input('请输入一个整数:')
n = n / 2
print(n)
except:
print('程序执行错误')
32. 已知字符"0"的ASCII码为48,字符"A"的ASCII码为65,下面程序的运行结果是:65 。( )
c='A'
n=48
print(ord(c)+chr(n))
33. 命令any(('1','','2','3')) 返回的结果是 False。( )
34. help()函数用于查看函数或模块用途的详细说明,返回对象为帮助信息。( )
35. 下列程序的运行结果是 11。()
a=max(2,4,1,8,9)
b=min("3","8","9","2","10")
print(a+int(b))
三、编程题(共3题,共30分)
36. 下面代码,在字典a中查找身高为137的人,请将代码中缺失部分补充完整。
a = {'小赵':136,'小钱':141,'小孙':146,'小李':138,'小周':142,'小吴':134,'小郑':137,'小王':143}
keys = a.keys()
b = 0 # 用于判断查找是否成功
for key in keys:
value = a[ ① ]
if ② == 137:
print('找到身高为137的人是: ', key)
b = b+1 # 有找到的人
③ # 退出循环
if b == 0 :
print('本次查找,未找到有身高为137的同学。 ')
37. 张老师手上有一份学生成绩单(cj.txt),成绩单上只有每位学生的各科成绩,而张老师希望能看到各科成绩的所有学生的平均分,以下代码可以实现平均分的计算,并按示例格式排版,请补充代码。
示例:
with open('/data/cj.txt', ① ) as f:
string = f.read()
data = string.split('
')
data.pop(0)
lis = []
for i in data:
new = i.split('\t')
lis.append(new)# 将分割得到的列表追加到空列表中,lis 为二维
lis1 = ['平均分']
for i in range(1,4):# 循环3次,因为需要计算3个科目的平均分
sum_ = ②
average = round(sum_ / 3)
lis1.append(str(average))
s = "\t".join(lis1)
res = string + s
with open('cj1.txt', 'w') as f:
f.write(res)
38. 工厂有一台检测设备用于检测器件,各个器件在不完全相同时刻送达,且检测时长各有不同。现在要按器件的送达时间(若送达时间相同则按检测时长)进行排序后再送检,送达时间和检测时间都是按升序排序。已知各个器件原始信息存在列表qj中:qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]],其中器件信息[2,1]表示器件送达时间是2,检测时长是1,其他器件信息类推。现在编写Python程序对各个器件进行排序,并重新输出。排序后的器件列表如下,请你在划线处完善程序:
qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]]
for i in range(len(qj)-1):
for j in range(0, ① ):
if ② or (qj[j][0]==qj[j+1][0]and ③ ):
qj[j],qj[j+1]=qj[j+1],qj[j]
print( ④ )
参考答案与解析:
一、单选题
1. 答案:C
- 解析:列表 things 中前四个是家具,后四个是水果,things[4:]可以输出从索引 4 开始到最后的水果数据。
2. 答案:A
- 解析:tscores 是一个嵌套列表,tscores[0]代表小贝的成绩列表,索引从 0 开始,第二次成绩对应的索引是 2,所以是 tscores[0][2]。
3. 答案:B
- 解析:tscores[1]代表小李的成绩列表,小李的最好成绩应该从他的三次成绩中选取,即 tscores[1][1:](排除名字)中的最大值,max(tscores[1][1:])。
4. 答案:D
- 解析:代码执行时如果文件不存在会自动创建;在文件中诗句之间以逗号连成一行,不会换行;f.write(','.join(gs)+'
')和 f.write('
'.join(gs)+',')显示结果不同;该段代码主要功能是将列表 gs 中的四句古诗写入到“jts.txt”文件中,诗句之间以逗号连成一行。
5. 答案:A
- 解析:可以用 Python 内置的 open()函数打开文件;对文件进行读取操作用 read()等函数,不是 write();对文件进行写入操作用 write()函数,不是 close();关闭文件用 close()函数,不是 read()。
6. 答案:D
- 解析:hex(10)会得到'0xa',表示十六进制的 a,即十进制的 10。
7. 答案:B
- 解析:十六进制数 100 转换为十进制是 1×16² = 256。
8. 答案:B
- 解析:本题考查学生对其它进制数转十进制数的掌握,正确答案选B 。A、0b与10矛盾;C、0o与10矛盾;D、八进制没有基数“8”。
9. 答案:D
- 解析:abs(-6)=6;int(6.88)=6;round(5.55)=6;min(float(6),9,8,7)=6.0,不是整数 6。
10. 答案:C
- 解析:count() 方法用于统计字符串里某个字符或子字符串出现的次数,程序是统计输入一段文字中“2”出现的次数,所以执行结果为3。程序正常运行后,不再执行except后的语句。
11. 答案:B
- 解析:字符串和整数不能直接相加,会触发异常,进入 except 代码块输出“错误”,最后执行 finally 代码块输出“程序结束”。
12. 答案:C
- 解析:对于有 n 个数据的列表进行冒泡排序,最多需要 n - 1 遍处理,6 个数据最多需要 5 遍。
13. 答案:B
- 解析:A选项最后一个元素是8,是最大的,排除。C选项是第1轮排序的结果,排除。正确答案是B。
14. 答案:B
- 解析:找出小于 100 的所有质数可以通过枚举算法,依次判断每个数是否为质数。
15. 答案:C
- 解析:循环中,非零值在 bool()函数中返回 True,0 返回 False,列表 h 中有 5 个非零值,所以 s 的最终结果是 5。
16. 答案:A
- 解析:abs()函数是取一个数值的绝对值,可以是整数、浮点数等,不只是整数的绝对值。
17. 答案:B
- 解析:divmod(29,7)返回商和余数组成的元组(4,1)。
18. 答案:D
- 解析:`all()`判断可迭代对象中元素是否都为真值,空对象也返回`True`。选项 A、B、C 中对象元素均为真值返回`True`,选项 D 中有空字符串为假值,返回`False`。答案是 D。
19. 答案:A
- 解析:filter(None,h)过滤掉列表 h 中的 False 值元素,返回一个可迭代对象,用 list()转换为列表[2, -3, -5, -6, -1, 4, 9]。
20. 答案:B
- 解析:'w'以写入的方式打开文件,如果文件不存在,会自动创建新文件,不会提示错误。
21. 答案:C
- 解析:ascii('A')返回'A'的 ASCII 值对应的字符串表示,ascii('Z')返回'Z'的 ASCII 值对应的字符串表示,两者相加为'A‘’Z'。
22. 答案:C
- 解析:'{:.1f}'.format(23.792)表示保留一位小数,结果是 23.8。
23. 答案:B
- 解析:bool([])返回 False,空列表为假;bool("0")返回 True,非空字符串为真;bool(None)返回 False;bool(range(0))返回 False,空范围为假。
24. 答案:B
- 解析:print(a,end='_')输出 a 的值后以'_'结尾,print(a,end="")输出 a 的值后不换行,print(a)输出 a 的值并换行,所以结果是 hello python_hello pythonhello python。
25. 答案:C
- 解析:sorted(h)对列表 h 进行排序,返回一个新的已排序列表,结果是[0, 1, 5, 6, 7, 9, 15]。
二、判断题
26. 答案:对
- 解析:在计算机中,二进制位只有 0 和 1 两个值。
27. 答案:对
- 解析:ord('a') = 97,ord('A') = 65,ord('a') - ord('A') = 97 - 65 = 32。
28. 答案:错
- 解析:打开文件的模式还有'a'(追加模式)、'r+'(读写模式)等。
29. 答案:对
- 解析:with open("english.txt",'r')as f: list1=f.readlines()会将文件内容读取为一个行的列表并输出。
30. 答案:错
- 解析:如果文件 a.txt 不存在,以'r'模式打开会报错。
31. 答案:错
- 解析:输入的 n 是字符串,不能直接进行除法运算,会触发异常,不会得到 4.0 的结果。
32. 答案:错
- 解析:ord('A') + chr(48) = 65 + '0',结果不是 65。
33. 答案:错
- 解析:any(('1','','2','3'))中有非空元素,结果为 True。
34. 答案:对
- 解析:help()函数用于查看函数或模块用途的详细说明,返回对象为帮助信息。
35. 答案:错
- 解析:max(2,4,1,8,9)=9,min("3","8","9","2","10")='10'(字符串比较),9 + int('10') = 19,不是 11。
三、编程题
36.参考答案:
参考程序:
本题完整代码与注释如下:
a = {'小赵':136,'小钱':141,'小孙':146,'小李':138,'小周':142,'小吴':134,'小郑':137,'小王':143}
keys = a.keys() # 取得键名做为列表
b = 0 # 用于判断查找是否成功
for key in keys: # 利用键名进行循环,为顺序查找作准备
value = a[key] # 利用键名获取键值,便于下面比较
if value == 137: # 进行值比较
print('找到身高为137的人是: ', key) # 找到身高为137的学生,则打印出其键名
b = b+1 # 查找成功
break # 退出循环
if b == 0 :
print('本次查找,未找到有身高为137的同学。 ')# 没找到符合查找条件的人,则也给出提示
试题解析:
评分标准:
(1)key;(3分)
(2)value或者int(value)或者a[key]或者int(a[key]);(4分)
(3)break。(3分)
解析:
(1)key:在循环中,通过字典的键key来获取对应的值,所以这里应该是a[key]。
(2)value:将获取到的值与 137 进行比较,所以这里应该是value。
(3)break:当找到身高为 137 的人时,退出循环,使用break语句。
37.参考答案:
参考程序:
with open('/data/cj.txt', 'r') as f: # 以只读的方式打开文件
string = f.read() # 读取整个文件内容,返回字符串
data = string.split('
') # 按换行符分割为列表
data.pop(0) # 去标题部分
lis = [] # 空列表
for i in data: # 遍历被分割的列表
new = i.split('\t') # 将列表的一个元素按制表符分割
lis.append(new) # 将分割得到的列表追加到空列表中,lis 变为二维
lis1 = ['平均分'] # 定义一个列表用于存储平均分
for i in range(1, 4): # 循环3次,因为需要计算3个科目的平均分
sum_ = int(lis[0][i]) + int(lis[1][i]) + int(lis[2][i])
average = round(sum_ / 3) # 平均分,结果保整数
lis1.append(str(average)) # 转换为字符串并追加到lis1中
s = "\t".join(lis1) # 将列表连接成字符串
res = string + s
with open('cj1.txt', 'w') as f: # 以写入的方式打开文件
f.write(res)
试题解析:
评分标准:
(1)'r';(2分)
(2)int(lis[0][i]) + int(lis[1][i]) + int(lis[2][i])。(2分)(没有int给1分)
解析:
1. 使用'r'以只读模式打开文件。
2. int(lis[0][i]) + int(lis[1][i]) + int(lis[2][i])计算特定科目总分。
38.参考答案:
参考程序:
qj=[[2,1],[1,3],[0,2],[4,3],[12,4],[10,1],[4,1]]
for i in range(len(qj)-1):
for j in range(0,len(qj)-1-i):
if qj[j][0]>qj[j+1][0]or qj[j][0]==qj[j+1][0]and qj[j][1]>qj[j+1][1]:
qj[j],qj[j+1]=qj[j+1],qj[j]
print(qj)
①本题考查的是对二维列表进行冒泡排序。外循环控制排序趟数,内循环控制排序比较的次数以及比较的起止位。外循环变量i从0开始,内循环变量j从0开始,显然终值是len(qj)-1-i,比较过程从前往后两两相比。因此①处填写的步长应为len(qj)-1-i;
②根据题目意思,比较依据先是送达时间(从小到大),若相同则比较检测时长,因此②处表达的应该是相邻两个器件的送达时间相比,从交换语句来看第j项被交换至j+1项,从而判定②处答案为qj[j][0]>qj[j+1][0];
③qj[j][0]表示送达时间,qj[j][1]则表示的是检测时长,从qj[j][0]==qj[j+1][0]可知此处表示送达时间相同的情况下满足何种条件第j项会和第j-1项交换,显然要比的是检测时间,故而③处填写qj[j][1]>qj[j+1][1]。
④根据题意,最后需要输出排序后的器件列表,因此④处填写的器件列表名称qj。
试题解析:
评分标准:
(1)len(qj)-1-i;(4分)
(2)qj[j][0]>qj[j+1][0];(4分)
(3)qj[j][1]>qj[j+1][1];(4分)
(4)qj。(4分)
学科网(北京)股份有限公司
$$