内容正文:
青少年软件编程(Python)等级考试试卷(三级)
202106真题与解析
分数:100 题数:37 测试时长:60分钟
一、单选题(共25题,每题2分,共50分)
1. 关于open()函数的参数,下列描述正确的是?( )
A、"w+" 以十六进制格式打开一个文件只用于写入
B、"r+"打开一个文件用于读写。文件指针将会放在文件的末尾
C、"w" 打开一个文件只用于写入。如果该文件已存在则打开文件,并从原有位置开始编辑,即保留原有内容。如果该文件不存在,创建新文件
D、"r" 以只读方式打开文件,文件的指针将会放在文件的开头
2. 如下图代码,请问两条红线处应该填入?( )
A、1、没有变化 2、没有变化
B、1、没有变化 2、顺序会有变化
C、1、顺序会有变化 2、顺序会有变化
D、1、顺序会有变化 2、没有变化
3. 下面不同数制数据中,数值最大的是?( )
A、0x2B
B、0o37
C、41
D、0b100111
4. 执行下面代码:
print(bool(2)+3)
打印出的结果为?( )
A、3
B、4
C、5
D、报错
5. 求既是3的倍数且各个位上的数的和是8的倍数的三位数,适合的算法是?( )
A、解析算法
B、枚举算法
C、排序算法
D、对分查找法
6. 下列选项不是Python异常处理可能用到的关键字?( )
A、try
B、else
C、if
D、finally
7. 已定义学期末考核科目km=["语文","数学","英语"],先根据安排需要添加综合学科进入考试科目,操作正确的是?( )
A、km.append("综合")
B、km.insert("综合")
C、km.write("综合")
D、km.read("综合")
8. 表达式chr(ord("0")+3)的结果是?( )
A、333
B、'3'
C、"000"
D、"0","0","0"
9. 与十进制数 1770 对应的八进制数是?( )
A、3350
B、3351
C、3352
D、3540
10. 下面代码的输出结果是?( )
a = [5,1,3,4]
print(sorted(a,reverse = True))
A、[5, 1, 3, 4]
B、[5, 4, 3, 1]
C、[4, 3, 1, 5]
D、[1, 3, 4, 5]
11. 用冒泡排序算法对6个数进行排序,进行比较的次数为?( )
A、4
B、5
C、10
D、15
12. 以下代码执行后,如果用户输入为:3*6,则输出为?( ) cal=input("请输入计算公式:
") print(eval(cal))
A、3*6
B、"3*6"
C、18
D、"18"
13. 关于Python函数的描述,正确的是?( )
A、表达式float("3.14") 的结果是3.14
B、表达式type(100)的结果是十进制数
C、表达式oct(100)可以获得十六进制数
D、表达式hex(100)可以获得八进制数
14. Python中abs ()函数的作用为?( )
A、求绝对值
B、求开方结果
C、求平方结果
D、求立方结果
15. 以下代码的执行结果为?( )
t=(11,25,36) avg=sum(t)/len(t) print(avg)
A、24
B、24.0
C、12
D、12.0
16. Python中十六进制与十进制进行转换时,下列表述错误的是?( )
A、十进制数57转换成十六进制,可以表示成int('57',16)
B、十进制数57转换成十六进制,可以表示成hex(57)
C、十六进制数39转换成十进制,可以表示成int('39',16)
D、十六进制数39转换成十进制,可以表示成0x39
17. Python中使用open()函数打开文件完成读的功能,下列说法错误的是?( )
A、readlines()方法是读取文本所有的行,直到文件末尾
B、readline()方法是读取文件的第一行
C、在同一个程序中,多次使用readline()方法后,程序仍读取第一行的内容
D、执行readline()方法后,运行的结果不是列表,而是字符串
18. 以下代码执行后,得到的结果为?( )
list1 = [5, 0, 6, 1, 2, 7, 3, 4]
print(sorted(list1, reverse=True))
A、[7, 6, 5, 4, 3, 2, 1, 0]
B、[0, 1, 2, 3, 4, 5, 6, 7]
C、[4, 3, 7, 2, 1, 6, 0, 5]
D、[5, 0, 6, 1, 2, 7, 3, 4]
19. int(7.8)的执行结果是?( )
A、8
B、8.0
C、7
D、7.0
20. 关于查找的说法,下列说法正确的是?( )
A、顺序查找属于无序查找
B、对分查找一定能找到数据
C、对分查找是一种低效的查找方法
D、顺序查找次数一定比对分查找次数多
21. 当try子句中没有任何错误时,一定不会执行语句?( )
A、try
B、else
C、except
D、finally
22. Python可以通过哪个函数实现字符串数据的格式化处理?( )
A、format
B、int
C、max
D、str
23. 以下代码的输出结果是?( )
ls =[]
for m in '想念':
for n in '家人':
ls.append(m+n)
print(ls)
A、想念家人
B、想想念念家家人人
C、想家想人念家念人
D、['想家', '想人','念家','念人']
24. format方法通常用来格式化print的输出格式。以下程序中使用format来输出: 我叫小明,我今年12岁了,则代码中缺失部分应该填写?( )
name="小明" age=12 print("我叫{},我今年{}岁了".format(_________________))
A、age,name
B、name,age
C、name:age
D、age name
25. 下列数据中,不可能表示十六进制数的是?( )
A、ABC
B、17F
C、8H5
D、9a01
二、判断题(共10题,每题2分,共20分)
26. except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常。
27. any([])函数和any(())函数的结果是False。
28. 利用Python3自带的csv库进行操作,可使用以下程序获取class.csv文件中存储的表头信息,并进行输出。
import csv
with open('class.csv') as f:
reader=csv.reader(f)
head_row=next(reader)
print(head_row)
29. 利用csv格式存储二维数据时,每行都是一个一维数据,用逗号分隔,可以有空行。
30. 数学老师对小明说:我要计算[4,6,3,2,5,8,7,9]这几个整数的平方,你能帮我编程实现吗?
小明说:两行代码就能实现。程序如下!
请判断,小明的这个程序是否正确。
31. 多次使用readline()读取文件,如果要退到文件的起始位置,可以使用seek()实现。
32. Python中使用print函数输出时,输出完毕默认会换行,不能通过修改参数改为其它间隔方式。
33. 十六进制与八进制数值之间的转换,常常借助二进制或者十进制作为中间的桥梁。
34. 同一个整数分别用十六进制和八进制表示后,数值一定不相等。
35. 语句print("a","b","c",sep=",")的输出结果是:"a" "b" "c"。
三、编程题(共3题,共30分)
36. 法定节假日是根据各国、各名族的风俗习惯或纪念要求,由国家法律统一规定的用以进行庆祝及度假的休息时间。
法定节假日制度是国家政治、经济、文化制度的重要反映,涉及经济社会的多个方面,涉及广大人民群众的切身利益。
法定节假日的休假安排,为居民出行购物和休闲提供了时间上的便利,为拉动内需、促进经济增长做出了积极贡献。
给出一个2020年的节假日的放假日期CSV文件(vacations.csv),内容示例如下:
以第1行为例,1230表示12月30日,0101表示1月1日。
代码功能为:读入CSV文件中数据,获得用户输入。根据用户输入的节假日名称,输出此节假日的假期范围。请补全代码。
fi=open("/data/①;","r")
ls=[]
for line in fi:
ls.append(line.strip("
").split(","))
fi.close()
s=input("请输入节假日名称:")
for line in ls:
if ②:
print("{}的假期位于{}-{}之间".format(line[1], line[2], line[3]))
37. 尊老王国有一个默认规则,排队必须遵守年长的在前,年幼的在后。一支正要出城的队伍,请帮助他们顺利出城。
输入:
15、78、96、45、36
输出
[96, 78, 45, 36, 15]
[3, 2, 4, 5, 1]
请在划线处补全代码,实现以上功能
s = input()
x= s.split('、')
a = []
b = []
n = 0
for i in range(0, len(x)):
a.append(int(x[i]))
n = ___________
b.append(n)
for i in range(n-1):
for j in range(i+1, n):
if (__________):
_________________
b[i], b[j] = b[j], b[i]
print(a)
print(b)
38. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
n = int(input('请输入总人数:'))
num = []
for i in range(n):
num.append ①)
i = 0
k = 0
m = 0
while m < n - 1:
if ②: k += 1
if k == 3:
num[i] = 0
k = 0
③
i += 1
if i == n : i = 0
i = 0
while num[i] == 0:i += 1
print(④)
参考答案与解析:
一、单选题
1. D
- 选项A,"w+"以二进制格式打开一个文件用于读写,如果文件已存在则覆盖,如果不存在则创建新文件;
- 选项B,"r+"打开一个文件用于读写,文件指针将会放在文件的开头;
- 选项C,"w"打开一个文件只用于写入,如果该文件已存在则覆盖原有内容,如果该文件不存在,创建新文件。
2. B
- sort():会在原内存地址上对原列表进行排序,直接改变原列表的值;sorted():会生成一个新的已排序列表,不会改变原可迭代对象的值。
3. A
- 分别将各选项转换为十进制:A 选项0x2B为十六进制,转换后是43;B 选项0o37是八进制,转换后是31;C 选项是十进制41;D 选项0b100111是二进制,转换后是39。比较可得数值最大的是 A 选项。
4. B
- `bool(2)`为`True`,在数值运算中`True`等于1,所以`bool(2)+3 = 1 + 3 = 4`。
5. B
- 枚举所有的三位数,逐一判断是否满足既是3的倍数且各个位上的数的和是8的倍数,这是枚举算法的典型应用。
6. C
- Python异常处理用到的关键字有`try`、`except`、`else`、`finally`。
7. A
- `append()`方法用于在列表末尾添加一个元素。
8. B
- `ord("0")`得到字符'0'的ASCII码值48,加上3后为51,`chr(51)`得到字符'3'。
9. C
- 反向取余法 3352。
10. B
- `sorted()`函数默认升序排列,`reverse=True`表示降序排列。
11. D
- 冒泡排序算法对 n 个数进行排序,比较次数为 n*(n - 1)/2,6个数的比较次数为6*(6 - 1)/2 = 15。
12. C
- `eval()`函数用于执行一个字符串表达式,并返回表达式的值。
13. A
- `float("3.14")`将字符串'3.14'转换为浮点数3.14;`type(100)`的结果是`<class 'int'>`;`oct(100)`获得八进制数;`hex(100)`获得十六进制数。
14. A
- `abs()`函数求绝对值。
15. B
- `sum(t)`计算元组中元素的总和,`len(t)`得到元组的长度,两者相除得到平均值,结果为24.0。
16. A
- 十进制数57转换成十六进制,可以表示成`hex(57)`或`int('57',10)`转换为十进制后再用`hex()`转换,不能直接用`int('57',16)`。
17. C
- 在同一个程序中,多次使用`readline()`方法后,会依次读取文件的下一行内容。
18. A
- `sorted()`函数默认升序排列,`reverse=True`表示降序排列。
19. C
- `int(7.8)`将浮点数7.8转换为整数7。
20. A
- 顺序查找可以对无序数据进行查找;对分查找不一定能找到数据;对分查找是一种高效的查找方法;顺序查找次数不一定比对分查找次数多。
21. C
- 当`try`子句中没有任何错误时,会执行`try`中的代码,然后执行`else`和`finally`中的代码,不会执行`except`中的代码。
22. A
- `format()`函数可以实现字符串数据的格式化处理。
23. D
- 双重循环遍历两个字符串,将每个字符组合后添加到列表中,最终输出列表。
24. B
- `format()`函数中的参数顺序与大括号中的占位符顺序相对应。
25. C
- 十六进制数由0-9和A-F组成,不能包含其他字符。
二、判断题
26. 正确。
- Python会按`except`语句的顺序依次匹配指定的异常。
27. 正确。
- `any([])`和`any(())`在空的可迭代对象上结果为`False`。
28. 正确。
- 使用`csv.reader()`可以读取 CSV 文件,`next(reader)`可以获取表头信息。
29. 错误。
- 利用`csv`格式存储二维数据时,每行都是一个一维数据,用逗号分隔,不能有空行。
30. 正确。
- 使用列表推导式可以快速实现对列表中每个元素求平方。
31. 正确。
- `seek()`可以将文件指针移动到指定位置,退到文件的起始位置可以使用`seek(0)`。
32. 错误。
- `print`函数输出完毕默认会换行,可以通过修改参数`end`改为其它间隔方式。
33. 正确。
- 十六进制与八进制数值之间的转换常常借助二进制或者十进制作为中间桥梁。
34. 错误。
- 同一个整数分别用十六进制和八进制表示后,数值是相等的,只是表示方式不同。
35. 错误。
- 语句`print("a","b","c",sep=",")`的输出结果是:`a,b,c`。
三、编程题
36.参考答案:
① vacations.csv (2分)
② s == line[1] (2分)
试题解析:
fi=open("vacations.csv","r")
ls=[]
for line in fi:
ls.append(line.strip("
").split(","))
fi.close()
s=input("请输入节假日名称:")
for line in ls:
if s == line[1]:
print("{}的假期位于{}-{}之间".format(line[1], line[2], line[3]))
37. 参考答案:
① n+1(5分)
② a[i] < a[j](5分)
③ a[i], a[j] = a[j], a[i](6分)
试题解析:
s = input()
x= s.split('、')
a = []
b = []
n = 0
for i in range(0, len(x)):
a.append(int(x[i]))
n = n + 1
b.append(n)
for i in range(n-1):
for j in range(i+1, n):
if (a[i]<a[j]):
a[i], a[j] = a[j], a[i]
b[i], b[j] = b[j], b[i]
print(a)
print(b)
38. 参考答案:
① i + 1 (3分)
② num[i] != 0 (2分)
③ m += 1 (3分)
④ num[i] (2分)
①处应该填入 i + 1,这样可以将每个人的编号依次放入列表中。
②处应该填入 num[i]!=0,表示当前这个人还没有被淘汰,继续报数。
③处应该填入 m += 1,因为有一个人被淘汰了,需要增加淘汰人数的计数。
④处应该填入 num[i],输出最后留下的人的编号。
试题解析:n = int(input('请输入总人数:'))
num = []
for i in range(n):
num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
if num[i] != 0 : k += 1
if k == 3:
num[i] = 0
k = 0
m += 1
i += 1
if i == n : i = 0
i = 0
while num[i] == 0:i += 1
print(num[i])
学科网(北京)股份有限公司
$$