青少年软件编程(Python)等级考试试卷(三级)
分数:100 题数:38
一、单选题(共25题,共50分)
1.一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( )
A. 10倍
B. 2倍
C. 4倍
D. 8倍
标准答案:C
试题解析:二进制进位规则是逢二进一,因此末尾添加一个0,是扩大2倍,添加两个0,是扩大4倍。如二进制1——>10——>100,其大小分别为1,2,4。
2.2023年亚运会将在杭州举办。关于2023,若将其转换为二进制数,则末位数字为?( )
A. 0
B. 1
C. 3
D. 不确定
标准答案:B
试题解析:由于2023是单数(奇数),因此第一次除以2的余数将是1,根据十进制转二进制方法,该余数为二进制的最低位。
3.二进制数10010,转换为十进制数和十六进制数分别为?( )
A. 18和12
B. 36和1A
C. 50和1A
D. 36和12
标准答案:A
试题解析:二进制转十进制是按权展开相加法,(10010)2=1 * 24+1 * 21=(18)10,二进制转十六进制是从低位开始,每四位二进制数转换为一位十六进制数,故为12。
4.在Python中,int(‘1010’,8)语句的作用是?( )
A. 将十进制数1010转化为八进制数1010
B. 将二进制数1010转化为八进制数12
C. 将八进制字符串“1010”转化为八进制整数
D. 将八进制数“1010”转化为十进制整数
标准答案:D
试题解析:int(‘1010’,8)语句的作用是将八进制数“1010”转化为十进制整数。
5.假设cai.csv文件内容如下图所示,那么下列代码的输出结果是?( )
f = open(‘cai.csv’, ‘r’)
c = []
for i in f:
c.append(i.strip(‘\n’).split(‘,’))
f.close()
print©
A. [[‘肉’,‘15’],[‘白菜’,‘8’]]
B. [‘肉’,‘15’,‘白菜’,‘8’]
C. [‘肉’,‘15’],[‘白菜’,‘8’]
D. ‘肉’,‘15’,‘白菜’,‘8’
标准答案:A
试题解析:从csv格式文件读取数据,得到的是列表对象。
6.2023年中国航天事业再次刷新纪录,主要事件记录在abc.txt文件中,具体内容如下图所示,程序运行后s值是?( )
f = open(r’abc.txt’,‘r’)
s = f.readline()
print(s)
A. 5月11日,天舟六号
B. 5月30日,神舟十六
C. 6月 7日,力箭一号
D. 6月16日,长征二号
标准答案:A
试题解析:readline()是只读取一行,所以答案是A;而read()是读取全部内容。
7.Python是强大的数据处理工具,能方便读写文件。 打开D:\test.csv,文件的内容如下图所示,
>>>f=open(r"D:\test.csv",'r')
>>>s1=f.read()
>>>s2=f.read()
>>>f.close()
运行上述程序,说法正确的是?( )
A. >>>s1
‘hello python!’
B. >>>s1
‘hello word!’
C. >>>s1
‘hello python!\nhello word!\n’
D. >>>s2
‘hello python!\nhello word!\n’
标准答案:C
试题解析:
read()函数的使用
>>>f=open(r"D:\test.csv",'r')
>>>s1=f.read() #从文件指针所在位置,读到文件结尾
>>>s2=f.read()#读取到了0个字节,因为文件指针已经读到文件尾部
>>>f.close()
>>>s1'hello word!\nhello word!\n'
>>>s2
8.Python是强大的数据处理工具,目前受到大家青睐。下列说法错误的是?( )
A. 数据文件格式丰富,常见的有一维数据、二维数据和多维数据
B. read()函数可以读取整个文件的内容
C. write()函数向文件中可以写入列表、字符串、整型等数据类型内容
D. python中有许多函数,能够直接对csv、excel、txt等文件内容读写、删除等操作
标准答案:C
试题解析:write()函数只能写入字符串类型的数据,如果要写入其他类型的数据,需要先将其转换为字符串类型。
9.运行下面一段程序,说法正确的是?( )
f = open(‘yayun.txt’, ‘w’)
f.write(‘迎亚运,创未来\nHeart to Heart\n’)
f.close()
A. 运行程序后,打印:
‘迎亚运,创未来\nHeart to Heart\n’
B. 运行程序后,打印:
迎亚运,创未来
C. 本段程序的功能是打开yayun.txt
D. 如果python程序同目录下不存在yayun.txt,将创建yayun.txt
标准答案:D
试题解析:考察学生对文件写入的理解,如果没有yayun.txt,将创建一个新的文件yayun.txt,如果之前已有文件,则会覆盖文件内容。
\n换行,所以文件的内容是:
迎亚运,创未来
Heart to Heart
10.语句print(chr(ord(‘a’)+5))的运行结果是?( )
A. 66
B. e
C. f
D. g
标准答案:C
试题解析:ord(‘a’)可以获取字符a的ascii码,将该ascii码加5后再转chr,即可获得从a开始,按顺序向后数5个的字符,即f。答案选择C。
11.表达式sum(map(int,‘12345’))的返回值是?( )
A. [1, 2, 3, 4, 5]
B. [‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
C. 10
D. 15
标准答案:D
试题解析:map可以把序列’12345’中的每个字符转成int类型,结果是一个包含数字1,2,3,4,5的迭代器。sum可以对上述结果进行求和,所以结果是1+2+3+4+5的和,即15,选择D。
12.下列选项中,结果与其他三项不同的是?( )
A. print(list(range(1, 10, 2)))
B. print(list(range(1, 11, 2)))
C. print(list(‘13579’))
D. print(list(map(int,[‘1’, ‘3’, ‘5’, ‘7’, ‘9’])))
标准答案:C
试题解析:range(1, 10, 2)可以生成包含第1个参数,不包含第2个参数,间隔为第3个参数的序列,所以range(1, 10, 2)生成的序列为1,3,5,7,9,用list函数转换为列表[1,3,5,7,9]。 range(1, 11, 2)生成的序列也是1,3,5,7,9,不包含11,所以AB选项的结果相同。 list(‘13579’)可以将字符串中的每个字符保存到列表中,但是数据类型是字符串,与AB结果不同。 D选项中,map函数将列表[‘1’, ‘3’, ‘5’, ‘7’, ‘9’]中的每个元素都转成整数,最后保存成列表,与AB选项相同。 所以选择C。
13.divmod(-9, 2)的结果是?( )
A. (-5, 1)
B. (-1, -4)
C. (-4, -1)
D. (1, -5)
标准答案:A
试题解析:divmod函数的结果是一个元组,包含两个数字,分别表示第1个参数除以第2个参数的整数部分和余数部分。 -9除以2的整数部分是-5,余数为1,余数的符号与除数的符号相同。所以结果为(-5,1),选择A。
14.下列代码创建了4个变量,其中变量值最大的是?( )
a = round(3.65)
b = int(max(‘123’))
c = 7/2
d = abs(-3.9)
A. a
B. b
C. c
D. d
标准答案:A
试题解析:round函数的作用是四舍五入取整,所以round(3.65)的结果是4; max(‘123’))的结果是’3’,转整数后是3; 7/2的结果是3.5; abs(-3.9)将负数变成正数,结果是3.9; 综上所述,4最大,所以选择A。
15.bool(0)的结果是?( )
A. True
B. False
C. 1
D. 0
标准答案:B
试题解析:0的布尔值是False。
16.语句set(‘2023’)的返回值是?( )
A. {2, 0, 2, 3}
B. {0, 2, 3}
C. {‘2’, ‘0’, ‘2’, ‘3’}
D. {‘0’, ‘2’, ‘3’}
标准答案:D
试题解析:set函数可以去掉序列中的重复元素,所以选择D。
17.a=[1,2,3,4,5],则sum(a)的值是?( )
A. ‘[1,2,3,4,5]’
B. ‘15’
C. 15
D. ‘12345’
标准答案:C
试题解析:sum()求列表a各元素的和,和为15。
18.表达式str([1,2,3])的返回值是?( )
A. [‘1’, ‘2’, ‘3’]
B. ‘[1, 2, 3]’
C. [‘123’]
D. str函数只能将数字转换成字符串,表达式中的参数是一个列表,运行报错
标准答案:B
试题解析:如果str中的参数是一个列表,str函数会将列表看做一个字符串返回结果。
19.下列选项中,对help函数的说法错误的是?( )
A. 可以使用help函数查看某个数据类型的帮助信息
B. 可以使用help函数查看某个函数的帮助信息
C. 可以使用help函数查看某个模块的帮助信息
D. 对于自己定义的变量,不可以使用help函数查看自定义变量的帮助信息
标准答案:D
试题解析:help函数可以获取某个变量、数据类型、函数、模块的帮助信息,所以选项D说法错误,选择D。
20.通过input()函数输入的数据类型是?( )
A. int
B. float
C. str
D. list
标准答案:C
试题解析:使用input函数输入的数据类型是string字符串类型。
21.运行下面程序,错误的输入和输出数据是?( )
try:
x=int(input())
y=int(input())
m=divmod(x,y)
print(m)
except:
print(‘error’)
else:
print(‘right’)
finally:
print(‘OK’)
A. 输入
1
0
输出
error
OK
B. 输入
0
5
输出
(0, 0)
right
OK
C. 输入
5
1
输出
(5, 0)
right
OK
D. 输入
5
0
输出
0
right
OK
标准答案:D
试题解析:考核 try…except…else…finally…格式。
22.运行下面程序,错误的输入和输出数据是?( )
try:
x=eval(input())
c=abs(x)
print©
except NameError:
print(‘NameError!’)
except:
print(‘Other error!’)
A. 输入
0
输出
Other error!
B. 输入
-2.5
输出
2.5
C. 输入
6
输出
6
D. 输入
abc
输出
NameError!
标准答案:A
试题解析:考核 try…except…格式和 abs()函数。
23.以下关于算法的描述错误的是?( )
A. 算法可以用自然语言、流程图、伪代码、编程语言等多种方式进行表示
B. 顺序结构、选择结构、循环结构是算法的3种基本结构
C. 算法可以没有输出,但必须有输入
D. 算法的执行步骤是有限的
标准答案:C
试题解析:
算法可以没有输入,但必须有输出。
24.用冒泡排序对4,5,6,3,2,1进行从小到大排序,第二趟排序后的状态是?( )
A. 4 5 3 2 1 6
B. 4 3 2 1 5 6
C. 3 2 1 4 5 6
D. 2 1 3 4 5 6
标准答案:B
试题解析:
冒泡排序的基本思想是从头到尾依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。第一趟排序后,最大的元素6已经排到了最后面,数组变为4,5,3,2,1,6。第二趟排序时,从头到尾依次比较相邻的元素,发现4比5小,因此不需要交换它们的位置;5比3大,需要交换它们的位置,数组变为4,3,5,2,1,6;5比2大,需要交换它们的位置,数组变为4,3,2,5,1,6;5比1大,需要交换它们的位置,数组变为4,3,2,1,5,6;最后,6比5大,不需要交换它们的位置,数组变为4,3,2,1,5,6。因此,第二趟排序后的状态为4,3,2,1,5,6,选项B正确。
25.在对n个元素进行直接插入排序的过程中,一般共需要进行几趟?( )
A. 2
B. n-1
C. n
D. n+1
标准答案:B
试题解析:
直接插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。在排序过程中,需要进行n-1趟插入操作,每一趟插入操作都会将一个记录插入到已经排好序的有序表中,因此共需要进行n-1趟插入操作。因此,选项B正确。
二、判断题(共10题,共20分)
26.十六进制数转换成十进制数,其位数一定变多。( )
正确 错误
标准答案:错误
试题解析:0~9范围内的数字在转换过程中,其位数不变。
27.表达式int(“ob110”,8)的结果应是72。( )
正确 错误
标准答案:错误
试题解析:该表达式是错误的,“0b”表示二进制,“8”表示八进制,矛盾。
28.在Python中,readlines()每次按行读取文件内容,通常将读取到的内容放到一个字符串变量中,返回str类型数据。( )
正确 错误
标准答案:错误
试题解析:readlines()每次按行读取全部文件内容,通常将读取到的内容放到一个列表中,返回list类型数据。
29.下列程序的功能是将列表对象输出到CSV文件。( )
shuig=[‘苹果’,‘香蕉’,‘桃子’,‘西瓜’]
f=open(‘shuiguo.csv’,‘w’)
f.write(‘,’.join(shuig)+‘\n’)
f.close()
正确 错误
标准答案:正确
试题解析:write()方法将shuig列表转化为字符串后写入到shuiguo.csv文件中。
30.CSV格式存储数据采用逗号分隔元素,也可以存储二维数据。( )
正确 错误
标准答案:正确
试题解析:CSV格式可以储存二维数据。
31.以下代码的运行结果是False。( )
a = any([None,[],(),[{}]])
print(a)
正确 错误
标准答案:错误
试题解析:
[{}]是包含一个空字典的列表,列表不为空,所以any的结果是True。
32.range(6)和range(0,6)的结果相同。( )
正确 错误
标准答案:正确
试题解析:range(6)和range(0,6)的运行效果相同,省略了第1个参数。
33.运行下列代码后,列表a中保存的元素是从小到大按顺序排列的。( )
a = [5, 6, 4, 8, 2, 7, 3, 1]
sorted(a)
正确 错误
标准答案:错误
试题解析:sorted()函数的作用是将序列排序,默认从小到大排序,但是不会修改原来序列中的元素排序,所以列表a不变,还是乱序的。
34.使用min函数可以获取多个数字中的最小值。( )
正确 错误
标准答案:正确
试题解析:min函数的作用是计算序列中的最小值。
35.try:
x=int(input())
y=int(input())
n=x%y
print(n)
except ValueError:
print(‘ValueError!’)
except ZeroDivisionError:
print(‘ZeroDivisionError!’)
except:
print(‘Other error!’)
当程序输入:
0
0
程序的运行结果是:
Other error!
正确 错误
标准答案:错误
试题解析:正确运行结果是:ZeroDivisionError! 考核try…except…except…格式 和识记关键字“ValueError”和“ZeroDivisionError”。
三、编程题(共3题,共30分)
36.学校图书馆为了方便查找管理书籍,给每本书编写了号码,[8,9,10,12,13,14,16,17,25,27],输入号码提示这本书号码排第几。
例如:输入12,输出:要查找的书号12排第4 。
请完善程序:
lst=[8,9,10,12,13,14,16,17,25,27]
hm=int(input(‘请输入书本号码’))
①
i,j=0,n-1
b=-1
while ② :
m=(i+j)//2
if ③ :
b=m
break
elif hm>lst[m]:
④
else:
j=m-1
if b==-1:
print(‘要查找的书号[’+str(hm)+‘]不在列表lst中。’)
else:
print(‘要查找的书号[’+str(hm)+‘]排第’+ ⑤ )
标准答案:
参考程序:
lst=[8,9,10,12,13,14,16,17,25,27]
hm=int(input('请输入书本号码'))
n=len(lst)
i,j=0,n-1
b=-1
while i<=j:m=(i+j)//2if hm==lst[m]:b=mbreakelif hm>lst[m]:i=m+1else:j=m-1
if b==-1:print('要查找的书号['+str(hm)+']不在列表lst中。')
else:print('要查找的书号['+str(hm)+']排第'+str(b+1))
试题解析:
评分标准:
(1)n=len(lst)或等效答案;(3分)
(2)i<=j或等效答案;(3分)
(3)hm==lst[m]或等效答案;(3分)
(4)i=m+1或等效答案;(3分)
(5)str(b+1))或等效答案。(4分)
展示地址:点击浏览
37.书籍价格查询
有一个“/data/书籍存单.csv”文件,内容如下图所示。小明编写代码,想查询小说《封神榜》的价格,请补充代码中缺失的部分。
with open(‘/data/书籍存单.csv’, ‘r’, encoding=‘utf-8’) as f:
for line in f.readlines():
a = ① .split(“,”)
if a[0] == “封神榜” :
print( ② )
标准答案:
参考程序:
with open(‘/data/书籍存单.csv’, ‘r’, encoding=‘utf-8’) as f:
for line in f.readlines():
a = line.split(“,”)
if a[0] == “封神榜” :
print(a[1])
试题解析:
评分标准:
(1)line或等效答案;(2分)
(2)a[1]或等效答案。(2分)
本题考查列表中数据位置的问题。a[1]对应的就是“价格”。
38.当我们过马路的时候,经常会遇到红绿灯,你知道这些信号灯的时长是怎么来的吗?若要用python分析计算人行马路最短绿灯时长,我们需要知道马路的宽度s,行人的步行速度v以及行人的反应时长t0,因为绿灯的最短时长计算公式为t=s/v+t0。
不同的人有不同的行走速度。通常在正常成人、老人、小孩的步行速度中,应选取老人或者小孩的数据进行计算比较合理。
用Python模拟编写绿灯最短时长程序和测试输出结果(测试输入马路宽度为15)分别如下,请补全划线处代码:
v=1.2 #设置行走速度
t0=1 #设置行人反应时长
s=int(input(“请输入马路的宽度(米):”))
t= ①
print(t)
#观察发现,在实际生活中,绿灯显示时长不可能为小数,因此若要上述输出结果正常,可以修改print(t)语句,那么你会如何修改?请在下方填入你的代码。
if t>int(t):
print( ② )
elif t==int(t):
print( ③ )
标准答案:
参考程序:
v=1.2 #设置行走速度
t0=1 #设置行人反应时长
s=int(input(“请输入马路的宽度(米):”))
t=s/v+t0
if t>int(t):
print(int(t)+1)
elif t==int(t):
print(int(t))
试题解析:
评分标准:
(1)s/v+t0或等效答案;(4分)
(2)int(t)+1 或等效答案;(3分)
(3)int(t)或等效答案。(3分)
解析:(1)处根据题目给出的条件可知,绿灯时长t=s/v+t0,显然此处已知条件都已具备,且根据输出结果来看,计算的结果为浮点类型,因此将公式表达为Python表达式即可,即s/v+t0。
(2)处由于绿灯的显示时长一般为整数,若计算的结果为13.5,那么实际时长应从14开始, 若结果恰好为13.0,那么实际显示数据应是13,即在计算公式保持不变的情况下,我们应使得计算结果向上取整。从分支语句来看,划线处可以使用int(t)+1替代原来的print(t)语句。
(3)处无需加1。