内容正文:
青少年软件编程(Python)等级考试试卷(三级)
202112真题与解析
分数:100 题数:37 测试时长:60分钟
一、单选题(共25题,共50分)
1. 小明在学习计算机时,学习到了一个十六进制数101,这个十六进制数对应的十进制数的数值是?( )
A. 65
B. 66
C. 256
D. 257
2. csv文件中读入数据的程序段如下:
f=open("city.csv","r")
ls=[]
for line in f:
ls.append(line.strip("
").split(","))
f.close()
print(ls)
与划线处等同功能的语句是?( )
A. line.pop("
")
B. line.del("
")
C. line.remove("
")
D. line.replace("
","")
3. 下列表达式的结果与其他三项不相同的是?( )
A. abs(-4)
B. round(abs(-3.5))
C. abs(round(-3.5))
D. min(round(-3.5),round(3.8))
4. 表达式max([111,22,3],key=str)的值为?( )
A. 3
B. 111
C. ’3’
D. ’111’
5. 下列不能产生结果为元组(1, 2, 3, 4)的是?( )
A. 1, 2, 3, 4
B. tuple({1:2,3:4})
C. tuple((1,2,3,4))
D. tuple([1,2,3,4])
6. 不能实现打开文件的功能的语句是?( )
A. f = open('D:/city.csv', 'w')
B. f = open('D:\city.csv', 'w-')
C. f = open('D://city.csv ', 'w')
D. f = open('D:\\city.csv ', 'w')
7. 关于十进制数,下列说法错误的是?( )
A. 十进制数的基数为10,所以从小数点向左数第二位的权值是10的2次幂
B. 十进制数的基数为10,所以里面包括0,1,2……,9这十个数码
C. 十进制数的基本运算规则满足“逢十进一”,所以有时我们可以采用凑十法来进行简便运算
D. 十进制数是有符号的,如-18
8. 关于Python的序列描述,不正确的是?( )
A. 序列是Python中最基本的数据结构
B. 最常见的序列是列表和元组
C. 序列中表示元素位置的数字叫做索引,索引都是正整数
D. Python内置了求序列长度的函数
9. 关于元组,描述不正确的是?( )
A. 元组是用括号把元素括在一起的,元素之间是用逗号分隔的
B. 元组可以为空,写做tup1=()
C. 元组中可以只有一个元素,写做tup1=(3)
D. 元组中的元素可以具有不同的类型
10. 以下程序的输出结果是?( )
x = 2
y = 0
try:
z = x / y
print(z)
except ZeroDivisionError:
print('error')
A. z
B. 2.0
C. error
D. 没有输出
11. 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。下列排序算法中效率最高的是?( )
A. 冒泡排序算法
B. 选择排序算法
C. 插入排序算法
D. 快速排序算法
12. bool()函数根据传入的参数的逻辑值创建一个新的布尔值,下列返回值是False的是?( )
A. bool(2*3-0)
B. bool(2*3-2)
C. bool(2*3-3)
D. bool(2*3-6)
13. 下列函数能创建一个新的元组的是?( )
A. tuple()
B. list()
C. dict()
D. set()
14. ascii()返回一个表示对象的字符串,则ascii(1)的结果是?( )
A. 1
B. '1'
C. "'1'"
D. "'\\u4e2d\\u6587'"
15. 下列输出结果为"1+2+3=?"的是?( )
A. print(1+2+3=?)
B. print(1+2+3,'=?')
C. print(1,2,3,sep='+',end='=?')
D. print(1,2,3,sep='+','=?')
16. a = max('12345'),下列选项中语法正确的一项是?( )
A. print(min(float(a),7,6))
B. print(min(chr(a),7,6))
C. print(min(bin(a),7,6))
D. print(min(hex(a),7,6))
17. 运行结果与其他三项不同的是?( )
A. sum([1,2,3],4)
B. sum([0,1,2],[3,2,2])
C. sum([2,2,2],max(4,3,2))
D. sum([0,3,4],int('3'))
18. 关于列表和元组的关系,下列描述不正确的是?( )
A. list() 函数可以将元组转换为列表
B. tuple()函数可以将列表转换为元组
C. 元组和列表是非常类似的,它们可以通过类型转换函数进行互相转换
D. 元组和列表本质上没有区别,只是元组是放在括号中,列表是放于方括号中而已
19. 当发生异常时,下列描述不正确的是?( )
A. 我们需要捕获异常,然后进行相应的处理
B. 我们需要把可能发生错误的语句放在try模块里
C. 我们需要把处理异常的语句放在except模块里
D. 我们需要为每一个try模块设定且只能设定一个except模块
20. 在Python中,int('10',2)语句的作用是?( )
A. 将十进制数10转化为二进制数1010
B. 将二进制数10转化为十进制整数
C. 将字符串“10”转化为二进制整数
D. 将字符串“10”转化为十进制整数
21. 以下描述中,错误的选项是?( )
A. 在Python中,0b100010表示二进制数100010
B. Python中int('1a32',2)语句执行时将不能得到结果,会出现错误提示
C. Python中0o、0b、0x依次表示二进制、八进制、十六进制数的前缀
D. 在Python中,运行hex(89)得到的结果是'0x59'
22. Python文件常用的写入方式有w和w+,它们的相同点是?( )
A. 追加读
B. 追加写
C. 可读可写
D. 文件不存在先创建,会覆盖原文件
23. 有如下程序段:
for i in range(5):
print(i,end=',')
输出结果是?( )
A. 0,1,2,3,4
B. 0,1,2,3,4,
C. 1,2,3,4,5
D. 1,2,3,4,5,
24. 有如下列表l=[7,2,9,6,4,5],采用冒泡排序进行升序排序,请问第3趟排序之后的结果是?( )
A. [2,4,5,6,7,9]
B. [2,4,5,7,6,9]
C. [2,4,7,5,9,6]
D. [2,7,4,9,6,5]
25. 有如下列表l=[7,6,3,8,4,1],采用选择排序进行升序排序,请问第3趟排序之后的结果是?( )
A. [1,3,4,6,7,8]
B. [1,3,6,8,4,7]
C. [1,6,3,8,4,7]
D. [1,3,4,8,6,7]
2、 判断题(共10题,共20分)
26. 在Python中,0x100010表示十六进制数100010。()
27. 在Python中,可以使用下面代码读取文件中的数据到列表 。()
file = open('score.csv','r')
name = file.read().strip('
').split(',')
file.close()
28. 在Python中open('name.csv','r')命令的作用是以可写入的方式打开文件名为name的csv格式文件。()
29. 在Python中,print(abs(8-12)*3)的输出结果为-12。()
30. 在Python中,divmod(98,8)的输出结果为(2,12)。()
31. 在Python中,chr(ord('a')-32)语句能将小写字母a转换为大写字母A。()
32. 在Python中,sorted()函数可以实现对列表中数据的排序,排序后原列表中数据的位置发生变化。()
33. bin函数可以将十进制数转换成二进制数。在Python交互式编程环境下,执行语句bin(15)后,显示的运行结果是'1111'。()
34. 二维数据可以用二维列表表示,该列表的每一个元素对应二维数据的一行。()
35. try...except结构的异常处理机制,当try代码段运行异常时,程序会跳到except代码段执行。()
三、编程题(共3题,共30分)
36. 小白兔们每天早上都到草坪上做早操。做操前,首先要按照身高由矮到高排个队,下列代码实现了排队的功能。首先读取小白兔的只数,然后读取每只小白兔的身高信息,进行由矮到高的处理,最后输出排好队的每只小白兔的身高,请你补全代码。
n = int(input('请输入兔子的总只数:'))
a = []
for i in range(n):
x = float(input('请输入身高'))
a.append( ① )
a. ②
for i in ③ :
print(a[i])
37. n个灯排成一排,开始时都是关着的。现进行如下操作: 所有电灯的按钮按动一次;所有编号为2的倍数的电灯按钮按动一次;所有编号为3的倍数的电灯的按钮按动一次; …… 所有编号为n-1的倍数的电灯的按钮按动一次;所有编号为n的倍数的电灯的按钮按动一次。 最后请统计有多少只电灯是亮的。编写程序实现上述功能,或补全代码。
n=int(input())
a=[]
for i in range( ① ):
a.append(-1)
for i in range(1,n+1):
for j in range(1,n+1):
if( ② ) == 0:
a[j] = ③ * -1
s=0
for i in range(1,n+1):
if (a[i] == ④ ):
s=s+1
print( ⑤ )
38. 请读取文件IP.txt的数据,数据内容如下图显示:
文件中每一行存储一个IP地址,下列代码实现了读取数据,每次读取一行数据,都删除了行末的换行符,最后逆序输出文件中的每行IP地址,请你补全代码。
输出参考如下:
49.97.132.119
32.33.23.232
112.114.44.44
with open(' ① ', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip(' ② ')
for i in range( ③ ):
print(list[i])
f.close()
参考答案与解析:
一、单选题
1. D
- 十六进制数101转换为十进制数为$1\times16^2 + 0\times16^1 + 1\times16^0 = 256 + 0 + 1 = 257$。
2. D
- line.strip("
")是去除字符串末尾的换行符,line.replace("
","")也能实现相同功能。
3. D
- abs(-4)=4;round(abs(-3.5))=4;abs(round(-3.5))=4;min(round(-3.5),round(3.8))=min(-4,4)= -4。
4. A
- max([111,22,3],key=str)会先将每个元素转换为字符串再比较,'3'最大。
5. B
- 1, 2, 3, 4会生成一个元组(1, 2, 3, 4);tuple({1:2,3:4})会生成一个元组,包含字典的键,即(1, 3);tuple((1,2,3,4))和tuple([1,2,3,4])也能生成元组(1, 2, 3, 4)。
6. B
- 文件路径中\需要转义,'w-'不是合法的打开模式。
7. A
- 十进制数从小数点向左数第二位的权值是10的1次幂。
8. C
- 序列中索引可以是负整数。
9. C
- 元组中只有一个元素时应写做tup1=(3,)。
10. C
- 发生除零错误,会执行except中的语句,输出'error'。
11. D
- 快速排序算法效率最高。
12. D
- bool(2*3-6)=bool(0),结果为False。
13. A
- tuple()能创建一个新的元组。
14. B
-`ascii(1)`的结果是`'1'`,答案是 B。整数 1 经过`ascii()`函数处理后以字符串形式返回。选项 A 不是字符串;选项 C 多了一层单引号;选项 D 是中文字符的 Unicode 编码表示,与整数 1 无关。
15. C
- print(1,2,3,sep='+',end='=?')输出结果为"1+2+3=?"。
16. A
- max('12345')='5',chr(a)是错误的,bin(a)、hex(a)、float(a)都是将字符'5'转换后再比较。
17. B
- sum([1,2,3],4)=10;sum([0,1,2],[3,2,2])=[0, 1, 2, 3, 2, 2];sum([2,2,2],max(4,3,2))=10;sum([0,3,4],int('3'))=10。
18. D
- 元组是不可变序列,列表是可变序列,本质上有区别。
19. D
- 一个 try 模块可以有多个 except 模块。
20. B
- int('10',2)是将二进制数10转化为十进制整数。
21. C
- 0b表示二进制数前缀,0o表示八进制数前缀,0x表示十六进制数前缀。
22. D
- w和w+的相同点是文件不存在先创建,会覆盖原文件。
23. B
- range(5)生成0到4的序列,输出结果是0,1,2,3,4,。
24. B
- 冒泡排序第三趟结果是[2,4,5,7,6,9]。
25. D
- 选择排序第三趟结果是[1,3,4,8,6,7]。
二、判断题
26. 正确
- 在 Python 中,0x100010 表示十六进制数 100010。
27. 正确
- 该代码可以读取文件中的数据到列表。
28. 错误
- open('name.csv','r')是以只读方式打开文件。
29. 错误
- abs(8 - 12) = 4,4 * 3 = 12。
30. 错误
- divmod(98,8)的输出结果为(12,2)。
31. 正确
- ord('a')得到小写字母 a 的 ASCII 值,减去 32 后再用 chr 转换为大写字母 A。
32. 错误
- sorted()函数排序后原列表中数据的位置不发生变化。
33. 错误
- bin(15)显示的运行结果是'0b1111'。
34. 正确
- 二维数据可以用二维列表表示,该列表的每一个元素对应二维数据的一行。
35. 正确
- try...except 结构的异常处理机制,当 try 代码段运行异常时,程序会跳到 except 代码段执行。
三、编程题
36.参考答案:
评分标准:
① x (3分)
② sort() 或等效答案(4分)
③ range(n) 或等效答案(3分)
解析:
①处应该填入x,将输入的身高值添加到列表a中。
②处应该填入sort(),对列表a中的身高进行升序排序。
③处应该填入range(len(a)),遍历排序后的列表a并输出每只小白兔的身高
参考程序:
n = int(input('请输入兔子的总只数:'))
a = []
for i in range(n):
x = eval(input('请输入身高'))
a.append(x)
a.sort()
for i in range(n):
print(a[i])
37.参考答案:
① n + 1 或等效答案;(3分)
② j % i 或等效答案;(4分)
③ a[j] 或等效答案;(3分)
④ 1 或等效答案;(3分)
⑤ s 或等效答案;(3分)
解析:
①处应该填入n + 1,确保能容纳从索引 1 到n的所有电灯状态,同时考虑到索引从 0 开始,所以需要多一个空间。
②处应该填入j % i,判断电灯编号j是否是当前操作的倍数。
③处应该填入a[j],每次按动按钮时改变电灯的状态,即从亮变为灭或从灭变为亮,通过乘以 -1 来实现状态切换。
④处应该填入1,当电灯状态为亮时,值为 1。
⑤处应该填入s,输出亮着的电灯数量。
参考程序:
n=int(input())
a=[]
for i in range(n + 1):
a.append(-1)
for i in range(1,n + 1):
for j in range(1,n + 1):
if(j % i ) == 0:
a[j] = a[j] * -1
s=0
for i in range(1,n + 1):
if (a[i] == 1):
s=s + 1
print(s)
38.参考答案:
评分标准:
①IP.txt (1分)
②
(1分)
③len(list)-1,-1,-1(2分)
解析:
①处应该填入'IP.txt',表示要读取的文件名。
②处应该填入'
',因为每行末尾的换行符是'
',使用strip()方法去除它。
③处应该填入len(list)-1, -1, -1,这样可以实现从最后一个元素开始,逆序遍历列表。
参考程序:
with open('IP.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].strip('
')
for i in range(len(list)-1,-1,-1):
print(list[i])
f.close()
学科网(北京)股份有限公司
$$