青少年编程Python编程等级考试三级真题解析(选择题+判断题+编程题) 2023年5月
一、选择题(共25题,共50分)
-
请选择,下面代码运行之后的结果是?( )
a = '2' b = '4' try: c = a * b print(c) except: print('程序出错!') else: print('程序正确!')
A. 24
B. 8
C. 程序出错!
D. 程序正确!答案选:C
考点分析:考察python 程序异常
变量a与b都是字符串,不能进行乘法运算,所以经过异常处理之后,会打印”程序出错!“,所以答案C -
下面程序执行结果是?( )
a = ['春', '夏', '秋', '冬'] c = list(enumerate(a)) print(c)
A. [(0, ‘春’), (1, ‘夏’), (2, ‘秋’), (3, ‘冬’)]
B. [ [0, ‘春’], [1, ‘夏’], [2, ‘秋’], [3, ‘冬’] ]
C. [(1, ‘春’), (2, ‘夏’), (3, ‘秋’), (4, ‘冬’)]
D. [ [1, ‘春’], [2, ‘夏’], [3, ‘秋’], [4, ‘冬’] ]答案选:A
考点分析:考察python enumerate()函数
enumerate()函数用于将可遍历的数据对象组合为一个索引序列。如果 enumerate(对象),数据下标从0开始;enumerate(对象,start=1),则数据下标从1开始,所以答案A -
下面程序执行结果是?( )
s = '123456789' print(min(s) + max(s))
A. 1
B. 9
C. 10
D. 19答案选:D
考点分析:考察python max与min函数使用
s=‘123456789’,min(s)=‘1’,max(s)=‘9’,所以结果为两个字符串相连,正确答案为:19,所以答案D -
打开b.txt文件,将"Hello Tom!"写入文件,下列语句正确的是?( )
A. f.write([‘Hello’], [Tom!])
B. f.read(‘Hello’, ’ Tom!')
C. f.write(‘Hello Tom!’)
D. f.read(‘Hello Tom!’)答案选:C
考点分析:考察python 文件读写
在Python中,要将数据写入文件,可以使用文件对象的write()方法。该方法接受一个字符串参数,表示要写入的内容。所以答案C -
下列数据中,最大的数值是?( )
A. int(‘16’, 10)
B. int(‘110’, 2)
C. int(‘11’, 16)
D. int(‘1111’, 2)答案选:C
考点分析:考察python int函数进制转化
每个选项都是使用int()函数将字符串转换为整数。int()函数接受两个参数:字符串和基数(可选,默认为10)。
选项A. int(‘16’, 10)表示将字符串’16’转换为十进制整数。结果为16。
选项B. int(‘110’, 2)表示将字符串’110’转换为二进制整数。结果为6。
选项C. int(‘11’, 16)表示将字符串’11’转换为十六进制整数。结果为17。
选项D. int(‘1111’, 2)表示将字符串’1111’转换为二进制整数。结果为15。
因此,选项C中的结果17是给定选项中的最大数值。所以答案C -
十六进制数7E转换为二进制数是几位数?( )
A. 7
B. 6
C. 4
D. 2答案选:A
考点分析:考察python 进制转换
十六进制转二进制,从低位起,每位十六进制可转换为4位二进制数,合并后最左边的“0”去除,7E的十六进制数位为7和E。将7转换为二进制数,得到0111。将E转换为二进制数,得到1110。因此,7E的二进制表示为01111110,共7位数。所以答案A -
表达式int(‘13’, 8)的返回值是?( )
A. 12
B. 11
C. 10
D. 15答案选:B
考点分析:考察python int函数进制转化
此处int()函数的功能是将八进制的字符串解析成十进制数。可采用按权展开相加法:3×80+1×81=11。所以答案B -
有如下代码,对于该段代码,说法不正确的是?( )
res = [] f = open('Python08.txt','r') #Python08.txt中共4行诗句 p = f.readlines() for s in p: res.append(s) print(res) f.close()
A. 程序的功能是按行读取文本文件中的内容,并将其逐一写入列表res
B. 此处readlines()用法错误,应改成readline()
C. 该文本文件和程序代码文件在同一文件夹下
D. 参数’r’不允许修改该文本文件答案选:B
考点分析:考察python 文件读写
readline()每次只读取文件的一行,而readlines()是每次按行读取整个文件的内容,返回list类型数据。所以答案B -
有如下代码,对于该段代码,说法不正确的是?( )
s=["白日依山尽","黄河入海流","欲穷千里目","更上一层楼"] f=open('sj.txt','w') f.write('\n'.join(s)) f.close()
A. 写入文本文件的步骤主要是打开——写入——关闭
B. f.write(‘\n’.join(s))与f.write(’ ‘.join(s)+’\n’)的功能是相同的
C. write()的参数是一个字符串,而writelines()的参数可以是字符串也可以是字符序列
D. 该代码的功能是将列表中的诗句按行写入文本文件答案选:B
考点分析:考察python 文件读写
f.write(‘\n’.join(s))是将序列s中的元素用换行符连接并写入文件,而f.write(’ ‘.join(s)+’\n’)是将序列中的元素用空格符连接后换行写入文件,结果不一样。所以答案B -
编写程序代码时,我们经常会犯错,对于Python的异常处理,描述正确的是?( )
A. 可以用if…elif…else…进行异常处理
B. 异常处理可以弥补程序漏洞,让程序在任何情况下都不会终止运行
C. 通过异常处理语句,当程序输入错误时,仍可以让程序继续运行
D. 当遇到错误语句时,将执行try代码块语句答案选:C
考点分析:考察python 异常处理
Python程序对输入有一定要求,当输入不满足程序要求,可能会产生运行错误,这类错误可以被捕获并合理控制。异常处理不是针对任何错误。发生错误时,将执行except代码块语句。所以答案C -
若scores=“9,7,8,9,6,5”,则list(scores)的结果是?( )
A. [9, 7, 8, 9, 6, 5]
B. [‘9’, ‘7’, ‘8’, ‘9’, ‘6’, ‘5’]
C. [‘9’, ‘,’, ‘7’, ‘,’, ‘8’, ‘,’, ‘9’, ‘,’, ‘6’, ‘,’, ‘5’]
D. 9, 7, 8, 9, 6, 5答案选:C
考点分析:考察python list()函数
list()函数是python内置函数,功能是将序列中的元素转换为列表中的元素,转换中不改变元素的类型,故结果中的数字仍为字符串类型数字,元素包含逗号。所以答案C -
下列表达式的结果为True的是?( )
A. len(“13” + “4”) > 14
B. ord(min(“banana”)) < 65
C. sum([13, 14, 16]) == 53
D. any([“a”, “b”, “”, “d”])答案选:D
考点分析:考察python len()、ord()、min()、sum()、any()函数
len(“13”+“4”)的长度为3,ord(min(“banana”))为97,sum([13,14,16])为43,any()用于判断序列元素是否全为False。所以答案D -
下列有关于函数的说法,正确的是?( )
A. bool( )函数是一个类型转换函数,用于将给定参数转换为布尔类型,若没有参数,则出错
B. ascii()函数和ord()函数功能都是返回一个数值类型的数据
C. filter()函数用于过滤序列,过滤不符合条件的元素,一般由两个参数组成,即函数和序列
D. map()函数主要用于画地图答案选:C
考点分析:考察python bool()、ascii()、filter()、map()函数
bool()函数没有参数,则默认返回False。ascii()函数返回的是字符串。map()函数是一个映射函数,主要将参数中的函数作用在参数中的序列的每一个元素上。所以答案C -
下列表达中,和range(8)的结果相同的是?( )
A. range(0, 8)
B. range(1, 8)
C. range(0, 8, 2)
D. range(1, 9)答案选:A
考点分析:考察python range()函数
range(8)表示产生0~7范围的整数对象,初值默认从0开始,终值取不到。步长省略表示1。所以答案A -
已知x, y, z = map(int, [‘20’, ‘2’, ‘3’]),则表达式x + y + z的结果是?( )
A. 程序出错
B. 2023
C. 21
D. 25答案选:D
考点分析:考察python map()函数
map()函数表示将函数功能一一应用到对应的序列中,因此字符串’20’,‘2’,'3’分别被转换为三个整数20,2,3,分别赋值给x,y,z三个变量。所以答案D -
《孙子算经》是我国古代重要的数学著作,其中有一题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”小王同学用Python编写了如下程序,列说法不正确的是?( )
x = 1 while x > 0: if not ( ): x += 1 else: print(x) x += 1
A. 把第一个x += 1改成break,则程序输出一个结果
B. 括号内应填入的代码是x % 3 == 2 and x % 5 == 3 and x % 7 == 2
C. 该程序是个死循环
D. 该程序将有无穷多个输出答案选:A
考点分析:考察python 循环计算
当x=1时,if条件取非后满足,执行break,则直接退出循环,程序并没有输出结果。故A错。由于x向上递增,while条件始终满足,故程序将是一个死循环,不断有满足条件的x将被输出。所以答案A -
下列关于二维数据的描述,正确的是?( )
A. 二维数据就是由两个一维数据组成
B. 二维数据由多个一维数据组成
C. 二维数据的每一个一维数据之间,只能采用逗号进行分隔
D. 二维数据不适合以表格的形式进行存储答案选:B
考点分析:考察python 二维数据
二维数据由多个一维数据组成,适合以表格的形式进行存储。所以答案B -
使用open函数打开某个CSV格式文件后,如果要将整个文件里的内容读取到一个列表中,需要使用以下文件对象的哪个函数?( )
A. read()
B. readline()
C. readlines()
D. flush()答案选:C
考点分析:考察python 数据读写
readlines()支持将整个文件里的内容读取到一个列表中。所以答案C -
abs()是Python的内置函数,执行abs(-1.00)语句返回的结果是?( )
A. -1.00
B. 1
C. 1.0
D. 1.00答案选:C
考点分析:考察python abs()函数
abs()函数用于返回一个数的绝对值。在这种情况下,abs(-1.00)会返回-1.00的绝对值,即1.00。所以答案C -
divmod()是Python的内置函数。对应变量x和y,divmod(y, x)返回的结果是?( )
A. (x // y, x % y)
B. (x % y, x // y)
C. (y // x, y % x)
D. (y % x, y // x)答案选:C
考点分析:考察python divmod()函数
divmod()函数用于返回除法的商和余数,第一个参数是除数,第二个参数是被除数。在这种情况下,divmod(y,x)会返回y除以x的商和余数,即y // x和y % x。所以答案C -
在交互式编程环境下执行a = input(“请输入考试成绩:”)语句后,通过数字键盘输入数值89.5。输入完成后,查看变量a的数据类型,会是下列哪一种?( )
A. float
B. int
C. str
D. bool答案选:C
考点分析:考察python input()函数
input函数接收输入数据,且都是以字符串类型保存。所以答案C -
执行print(list(range(4)))语句后,显示的结果是?( )
A. [0, 1, 2, 3]
B. [1, 2, 3, 4]
C. [0, 0, 0, 0]
D. [‘’, ‘’, ‘’, ‘’]答案选:A
考点分析:考察python range()和list()函数
range(4)可以生成0-3的序列对象,list()函数将序列对象转换成列表[0, 1, 2, 3]。所以答案A -
暴力破解是一种常见的网络攻击行为,它采用反复试错的方法去尝试破解用户的密码。这种黑客工具主要使用以下哪种算法进行设计?( )
A. 枚举算法
B. 解析算法
C. 排序算法
D. 对分查找算法答案选:A
考点分析:考察python 简单算法
解析算法是用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解。枚举算法的基本思想是把问题所有的解一一罗列出来,并对每一个可能解进行判断,以确定这个可能解是否是问题的真正解。所以答案A -
对一组数据"6,1,3,2,8"进行排序,按从小到大的顺序进行排列,使用冒泡算法进行编程,则第一轮过后,排序的结果是?( )
A. 1, 6, 3, 2, 8
B. 1, 3, 6, 2, 8
C. 1, 3, 2, 6, 8
D. 1, 2, 3, 6, 8答案选:C
考点分析:考察python 简单算法
冒泡算法的基本思想是:两两比较相邻的数据,如果反序则交换,直到没有反序的数据为止。所以答案C -
二进制数11110010转换为十六进制数是?( )
A. 1502
B. 152
C. F2
D. F02答案选:C
考点分析:考察python 进制转换
二进制转十六进制方法:从二进制低位开始,4位为1组,分别进行转换,最左边如位数不足,补0凑足。1111->F,0010->2。所以答案C
二、判断题(共10题,共20分)
-
下列这段代码能够正常运行。对吗?( )
while True : a = input('请输入一个整数,若不是整数将会让你重新输入: ' ) try: b = int(a) except: print('你输入的不是整数!将返回重输。') else: print('你输入的是整数,程序结束。') break
A. 正确
B. 错误答案选:A
考点分析:考察python 异常处理
本代码利用异常处理机制,强制用户必须输入数字,代码能正确运行。判断为正确。所以答案A -
一组有n个元素的数列,如采用顺序查找法找到数列中的某一个元素,平均查找次数为 (n+1)/2 次。( )
A. 正确
B. 错误答案选:A
考点分析:考察python 异常处理
最坏找到次数为n次,最好找到次数为1次,因为顺序查找,所以平均找到次数为 (n+1)/2。所以答案A -
十进制数转十六进制数以后,位数一定变少了。( )
A. 正确
B. 错误答案选:B
考点分析:考察python 进制转换
十进制0~9,在十六进制中也是同样的表示,故位数不一定变少。所以答案B -
二进制数1101011011转换成十六进制数是35B。( )
A. 正确
B. 错误答案选:A
考点分析:考察python 进制转换
二进制转十六进制,从低位起,每4位二进制转1位,不足四位,高位补0。所以答案A -
使用open()方法一定要保证关闭文件对象,即调用close()方法。( )
A. 正确
B. 错误答案选:A
考点分析:考察python 文件操作
使用open()方法一定要保证关闭文件对象,即调用close()方法。所以答案A -
下面代码的功能是读取文件中的数据到列表。( )
file = open('fruits.csv','r') name = file.read().strip('\n').split(',') file.close()
A. 正确
B. 错误答案选:A
考点分析:考察python 文件操作
本题考查文件读取。read()函数的功能是一次性读取整个文件并生成一个字符串,split()函数是以’,'为分隔符将字符串分割成字符串列表。所以答案A -
本段代码最后还缺少一条’f.close()'语句以关闭文件。( )
a = ['shanghai', 'beijing', 'tianjin', 'chongqing', 'hangzhou'] with open('city.csv','w')as f: f.write(','.join(a)+'\n')
A. 正确
B. 错误答案选:B
考点分析:考察python 文件操作
使用with上下文处理语句打开文件,处理结束后会自动关闭被打开的文件。所以答案B -
sort()与sorted()函数的区别在于前者默认是升序,后者默认是降序。( )
A. 正确
B. 错误答案选:B
考点分析:考察python sort()和sorted()函数
sort()是列表的方法之一,使用方法是li.sort(),默认升序;sorted()是内建函数,可对所有可迭代对象进行排序,使用方法是sorted(li),默认升序。所以答案B -
round()函数属于数学函数,可用于近似保留小数位数。( )
A. 正确
B. 错误答案选:A
考点分析:考察python round()函数
round()函数是Python内置的一个用于四舍五入的函数,它的语法是round(number, ndigits),其中number是要进行四舍五入的数字,ndigits是要保留的小数位数,默认为0。所以答案A -
sum()函数不仅可以对列表数据进行求和,也可以对元组数据进行求和。( )
A. 正确
B. 错误答案选:A
考点分析:考察python sum()函数
sum()函数的语法是sum(iterable, start),其中iterable是可迭代对象(如列表、元组、集合等),start是可选参数,表示求和的初始值,默认为0,
案例:对带有初始值的元组进行求和
my_tuple2 = (1, 2, 3, 4, 5)
total2 = sum(my_tuple2, 10)
print(total2) # 输出 25。所以答案A
三、编程题(共3题,共30分)
-
某班级期中考试成绩汇总在文件“score.csv”中,包含了语文、数学、英语三科的分数,数据内容如下图显示:
小明编写了如下程序,读取成绩文件中的数据,并分别计算语文、数学、英语三科成绩的平均分,请你补全代码。import csv ChineseNum = 0 MathNum = 0 EnglishNum = 0 num = 0 with open('/data/score.csv',encoding='utf-8') as csv_file: row = csv.reader(csv_file, delimiter=',') next(row) # 读取首行 for r in row: ChineseNum += float( ① ) MathNum += float( ② ) EnglishNum += float( ③ ) num += ④ print("语文平均成绩是:%.2f"%(ChineseNum/num)) print("数学平均成绩是:%.2f"%(MathNum/num)) print("英语平均成绩是:%.2f"%(EnglishNum/num))
参考程序:
import csv ChineseNum = 0 MathNum = 0 EnglishNum = 0 num = 0 with open('/data/score.csv',encoding='utf-8') as csv_file: row = csv.reader(csv_file, delimiter=',') next(row) # 读取首行 for r in row: ChineseNum += float(r[0]) MathNum += float(r[1]) EnglishNum += float(r[2]) num += 1 print("语文平均成绩是:%.2f"%(ChineseNum/num)) print("数学平均成绩是:%.2f"%(MathNum/num)) print("英语平均成绩是:%.2f"%(EnglishNum/num))
-
新学期到了,学校接收了一批捐赠的图书,小明编写了一个简单的程序用来管理图书,并支持借阅功能。为了提高查找图书的效率,小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序,请你补全代码。
library = dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为['书名',本数]) #书籍入库 nums = len(library) #先计算图书编号总数 library[nums+1] = ['红楼梦',5] #在编号总数的基础上继续添加新书:library[新编号]=['书名',本数] library[nums+2] = ['西游记',10] library[nums+3] = ['水浒传',5] library[nums+4] = ['三国演义',10] print(library) blist = list(library.keys()) #按书名借阅: bookname = input('请输入借阅图书名称:') min_v = blist[0] max_v = blist[-1] turns = 0 while min_v <= ① : turns += 1 cur = (min_v + max_v) ② print(cur) if library[cur][0] == ③ : if library[cur][1] > 0: library[cur][1] -= ④ print('《%s》借阅成功!'%bookname) else: print('抱歉,您选择的书籍已被借完!') break elif blist[cur-1] > cur: min_v = ⑤ else: max_v = ⑥ print("经过%d轮二分查找,完成图书的搜索。"%turns)
评分标准:
(1)max_v;(2分)
(2)// 2;(2分)
(3)bookname;(3分)
(4)1;(3分)
(5)cur +1;(3分)
(6)cur -1。(3分)参考程序:
#学校图书管理系统 library = dict() #用字典生成一个图书管理数据结构(字典的键为编号,字典的值为['书名',本数]) #书籍入库 nums = len(library) #先计算图书编号总数 library[nums+1] = ['红楼梦',5] #在编号总数的基础上继续添加新书:library[新编号]=['书名',本数] library[nums+2] = ['西游记',10] library[nums+3] = ['水浒传',5] library[nums+4] = ['三国演义',10] print(library) blist = list(library.keys()) #按书名借阅: bookname = input('请输入借阅图书名称:') min_v = blist[0] max_v = blist[-1] turns = 0 while min_v <= max_v: turns += 1 cur = (min_v + max_v) // 2 print(cur) if library[cur][0] == bookname: if library[cur][1] > 0: library[cur][1] -= 1 print('《%s》借阅成功!'%bookname) else: print('抱歉,您选择的书籍已被借完!') break elif blist[cur -1] > cur: min_v = cur +1 else: max_v = cur -1 print("经过%d轮二分查找,完成图书的搜索。"%turns)
-
某班“天天向上”小组共有6个同学,姓名和身高数据分别存放在列表a中,编写程序实现小组同学按身高从高到低输出名单,运行结果如图所示:
程序代码如下,请在划线处补充完整:a = [ ["李洪全",135], ["王倩倩",154], ["吴乐天",148], ["周立新",165], ["鲁正",158], ["杨颖颖",150] ] for i in range(1,len(a)): for j in range(0, ① ): if a[j][1] ② a[j+1][1]: a[j], a[j+1] = a[j+1], a[j] print("小组名单是:") for i in range(len(a)): print( ③ )
评分标准:
(1)len(a)-i;(4分)
(2)<;(3分)
(3)a[i][0]。(3分)
参考程序:a = [ ["李洪全", 135], ["王倩倩", 154], ["吴乐天", 148], ["周立新", 165], ["鲁正", 158], ["杨颖颖", 150] ] for i in range(1, len(a)): for j in range(0, len(a) - i): if a[j][1] < a[j+1][1]: a[j], a[j+1] = a[j+1], a[j] print("小组名单是:") for i in range(len(a)): print(a[i][0])
本题考查冒泡排序算法。从外循环看,6个元素排5趟,应该能全部排整齐。内循环每趟主要从第一个元素开始,相邻元素两两相比,i=1时,j最终取到4,i=2时,j最终取到3,i=3时,j最终取到2,i=2时,j最终取到1,i=1时,j最终取到0,由于range()的终值是取不到的,故第一空应填len(a)-i;根据题目从高到低的要求,若前一个数小于后一个数,则应将其往后移,故第二空应为”<”;由输出结果观察可知,只需要输出排序后列表中的姓名部分,故第三空应填a[i][0]。