2021年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

2021年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试_第1张图片

Python等级考试(1~6级)全部真题・点这里

一、单选题(共25题,每题2分,共50分)

第1题

关于open()函数的参数,下列描述正确的是?

A: “w+” 以十六进制格式打开一个文件只用于写入
B: "r+"打开一个文件用于读写。文件指针将会放在文件的末尾
C: “w” 打开一个文件只用于写入。如果该文件已存在则打开文件,并从原有位置开始编辑,即保留原有内容。如果该文件不存在,创建新文件
D: “r” 以只读方式打开文件,文件的指针将会放在文件的开头

答案:D

“w+” 打开一个文件用于读写。"r+"打开一个文件用于读写。文件指针将会放在文件的开头。
“w” 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。“r” 以只读方式打开文件,文件的指针将会放在文件的开头。

第2题

如下图代码,请问两条红线处应该填入?

2021年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试_第2张图片

A: 1、没有变化 2、没有变化
B: 1、没有变化 2、顺序会有变化
C: 1、顺序会有变化 2、顺序会有变化
D: 1、顺序会有变化 2、没有变化

答案:B

考查学生对列表的sort函数以及sorted函数的掌握与理解。正确答案是B

第3题

下面不同数制数据中,数值最大的是?

A: 0x2B
B: 0o37
C: 41
D: 0b100111

答案:A

十六进制数0x2B转换为十进制是43,而其他选项的数值分别是31、41和39。因此,A选项中的数值最大。

第4题

执行下面代码:print(bool(2)+3)打印出的结果为?

A: 3
B: 4
C: 5
D: 报错

答案:B

bool函数是int子类型,如果有参数,会返回true也就是整数1,所以正确答案是选项B,也就是数字4

第5题

求既是3的倍数且各个位上的数的和是8的倍数的三位数,适合的算法是?

A: 解析算法
B: 枚举算法
C: 排序算法
D: 对分查找法

答案:B

枚举算法可以遍历所有可能的三位数,然后判断每个数是否既是3的倍数且各个位上的数的和是8的倍数。通过枚举算法,可以找到满足条件的三位数。

第6题

下列选项不是Python异常处理可能用到的关键字?

A: try
B: else
C: if
D: finally

答案:C

try、else和finally是Python中用于异常处理的关键字,而if是用于条件判断的关键字,与异常处理无直接关系。

第7题

已定义学期末考核科目km=[“语文”,“数学”,“英语”],先根据安排需要添加综合学科进入考试科目,操作正确的是?

A: km.append(“综合”)
B: km.insert(“综合”)
C: km.write(“综合”)
D: km.read(“综合”)

答案:A

使用append方法可以将"综合"添加到列表km的末尾,即将综合学科添加到考试科目中。

第8题

表达式chr(ord(“0”)+3)的结果是?

A: 333
B: ‘3’
C: “000”
D: “0”,“0”,“0”

答案:B

ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符,chr(ord(“0”)+3)的值为’3’

第9题

与十进制数 1770 对应的八进制数是?

A: 3350
B: 3351
C: 3352
D: 3540

答案:C

正确的转换方法是将十进制数 1770 除以 8,得到商和余数。依次将余数作为八进制数的位数,直到商为0。因此,1770 的八进制表示为 3352。

第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]

答案:B

sorted函数用于对列表进行排序,默认按照升序排序。通过设置reverse参数为True,可以实现降序排序。因此,给定的代码会将列表a按照降序排序,输出结果为[5, 4, 3, 1]。

第11题

用冒泡排序算法对6个数进行排序,进行比较的次数为?

A: 4
B: 5
C: 10
D: 15

答案:D

冒泡排序算法的基本思想是通过相邻元素的比较和交换来进行排序。对于n个元素的列表,冒泡排序需要进行n-1轮的比较。在每一轮比较中,相邻元素的比较次数为n-1次。因此,对于6个数进行排序,进行比较的次数为15次。

下面是比较的过程:

第一轮比较:需要进行5次比较
第二轮比较:需要进行4次比较
第三轮比较:需要进行3次比较
第四轮比较:需要进行2次比较
第五轮比较:需要进行1次比较

总共进行的比较次数为5 + 4 + 3 + 2 + 1 = 15次。

第12题

以下代码执行后,如果用户输入为:3*6,则输出为?( )

cal=input("请输入计算公式:\n")
print(eval(cal))

A: 36
B: "3
6"
C: 18
D: “18”

答案:C

代码中使用了eval函数来执行用户输入的计算公式。eval函数会将字符串作为有效的Python表达式进行求值。因此,用户输入的36会被计算为18,并输出结果为18。选项A: 36是用户输入的内容,选项B: "36"是用户输入的字符串,选项D: "18"是将计算结果转换为字符串。正确的输出结果是选项C: 18。

第13题

关于Python函数的描述,正确的是?

A: 表达式float(“3.14”) 的结果是3.14
B: 表达式type(100)的结果是十进制数
C: 表达式oct(100)可以获得十六进制数
D: 表达式hex(100)可以获得八进制数

答案:A

选项A正确,选项B.type(100)的结果是,选项C.oct(100)的值是’0o144’,获得八进制数,选项D.hex(100)的值是’0x64’,获得十六进制数。

第14题

Python中abs ()函数的作用为?

A: 求绝对值
B: 求开方结果
C: 求平方结果
D: 求立方结果

答案:A

在Python中,abs()函数可以用于计算一个数的绝对值,无论这个数是正数、负数还是零,都会返回其绝对值。

第15题

以下代码的执行结果为?

t=(11,25,36)
avg=sum(t)/len(t)
print(avg)

A: 24
B: 24.0
C: 12
D: 12.0

答案:B

sum是求和函数,len是计数函数。两者相除就是就平均数,结果为小数。故有(11+25+36)/3等于24.0。

第16题

Python中十六进制与十进制进行转换时,下列表述错误的是?

A: 十进制数57转换成十六进制,可以表示成int(‘57’,16)
B: 十进制数57转换成十六进制,可以表示成hex(57)
C: 十六进制数39转换成十进制,可以表示成int(‘39’,16)
D: 十六进制数39转换成十进制,可以表示成0x39

答案:A

A选项是将十六进制转为十进制

第17题

Python中使用open()函数打开文件完成读的功能,下列说法错误的是?

A: readlines()方法是读取文本所有的行,直到文件末尾
B: readline()方法是读取文件的第一行
C: 在同一个程序中,多次使用readline()方法后,程序仍读取第一行的内容
D: 执行readline()方法后,运行的结果不是列表,而是字符串

答案:C

在同一个程序中,每次调用readline()方法,它会读取文件的下一行内容。所以,每次调用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]

答案:A

这段代码会对列表list1进行降序排序,并打印排序后的结果。

第19题

int(7.8)的执行结果是?

A: 8
B: 8.0
C: 7
D: 7.0

答案:C

int(7.8)的执行结果是7。int()函数用于将一个数值或字符串转换为整数,它会将小数部分舍去,只保留整数部分。

第20题

关于查找的说法,下列说法正确的是?

A: 顺序查找属于无序查找
B: 对分查找一定能找到数据
C: 对分查找是一种低效的查找方法
D: 顺序查找次数一定比对分查找次数多

答案:A

顺序查找和对分不一定能查找到数据。对分查找是一种高效的查找方法。如果数据元素在第一个位置,顺序查找次数不一定比对分查找次数多。

第21题

当try子句中没有任何错误时,一定不会执行语句?

A: try
B: else
C: except
D: finally

答案:C

当try子句中没有任何错误时,不会执行except语句块。except语句块用于捕获和处理try子句中发生的异常。所以,正确的答案是选项C。

第22题

Python可以通过哪个函数实现字符串数据的格式化处理?

A: format
B: int
C: max
D: str

答案:A

Python可以通过format函数实现字符串数据的格式化处理。format函数允许将变量的值插入到字符串中的占位符位置,从而实现字符串的格式化。所以,正确的答案是选项A。

第23题

以下代码的输出结果是?

ls =[]
for m in '想念':
    for n in '家人':
        ls.append(m+n)
print(ls)

A: 想念家人
B: 想想念念家家人人
C: 想家想人念家念人
D: [‘想家’, ‘想人’,‘念家’,‘念人’]

答案:D

这段代码使用了两个嵌套的for循环,分别遍历字符串’想念’和’家人’中的字符。在每次循环中,将两个字符拼接起来,并将结果添加到列表ls中。最后,打印列表ls的内容。所以,正确的答案是选项D。

第24题

format方法通常用来格式化print的输出格式。以下程序中使用format来输出: 我叫小明,我今年12岁了,则代码中缺失部分应该填写?

name="小明"
 age=12
print("我叫{},我今年{}岁了".format(_________________))

A: age,name
B: name,age
C: name:age
D: age name

答案:B

在使用format方法进行字符串格式化时,可以通过占位符{}来表示需要插入变量的位置。在这个例子中,需要插入name和age两个变量的值,所以正确的填写方式是"我叫{},我今年{}岁了".format(name, age)。因此,正确的答案是选项B。

第25题

下列数据中,不可能表示十六进制数的是?

A: ABC
B: 17F
C: 8H5
D: 9a01

答案:C

在十六进制表示中,只能使用0-9和A-F(或a-f)来表示数字。选项C中的8H5包含了字母H,不符合十六进制的表示规则。所以,选项C不可能表示十六进制数。

二、判断题(共10题,每题2分,共20分)

第26题

except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常。

答案:正确

except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。

第27题

any([])函数和any(())函数的结果是False。

答案:正确

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。元素除了是 0、空、FALSE 外都算 TRUE。

第28题

利用Python3自带的csv库进行操作,可使用以下程序获取class.csv文件中存储的表头信息,并进行输出。

import csv
with open('class.csv') as f:
    reader=csv.reader(f)
    head_row=next(reader)
    print(head_row)

答案:正确

代码中使用了open()函数打开名为"class.csv"的文件,并将其赋值给变量f。然后,使用csv.reader()函数创建一个CSV读取器对象reader,并将文件对象f作为参数传递给它。

接下来,使用next()函数读取reader对象的下一行,也就是CSV文件的第一行,即表头信息,并将其赋值给变量head_row

最后,使用print()函数输出head_row,即表头信息。

所以,这段代码可以获取"class.csv"文件中存储的表头信息,并进行输出。

第29题

利用csv格式存储二维数据时,每行都是一个一维数据,用逗号分隔,可以有空行。

答案:错误

利用csv格式存储二维数据时,每行都是一个一维数据,用逗号分隔,不能有空行

第30题

数学老师对小明说:我要计算[4,6,3,2,5,8,7,9]这几个整数的平方,你能帮我编程实现吗?
小明说:两行代码就能实现。程序如下!

在这里插入图片描述

请判断,小明的这个程序是否正确。

答案:正确

本题综合考查学生对list()与map()函数的掌握情况。答案是正确。

第31题

多次使用readline()读取文件,如果要退到文件的起始位置,可以使用seek()实现。

答案:正确

在Python中,可以使用seek()方法将文件指针移动到文件的起始位置,以便重新读取文件内容。seek()方法接受一个参数,用于指定要移动的字节数。

如果你多次使用readline()方法读取文件,文件指针会随着每次读取逐渐向文件的末尾移动。如果想要重新读取文件,可以使用seek(0)将文件指针移动到文件的起始位置,然后再次使用readline()方法读取文件内容。

所以,使用seek()方法可以将文件指针退到文件的起始位置,以便重新读取文件内容。

第32题

Python中使用print函数输出时,输出完毕默认会换行,不能通过修改参数改为其它间隔方式。

答案:错误

print函数中使用end参数可以指定换行之外的其它间隔符,如Tab等。

第33题

十六进制与八进制数值之间的转换,常常借助二进制或者十进制作为中间的桥梁。

答案:正确

在进行十六进制与八进制数值之间的转换时,常常使用二进制或者十进制作为中间的桥梁。

对于十六进制数值,每一位可以表示4个二进制位,而每一位的十进制值可以表示3个二进制位。因此,可以将十六进制数值转换为二进制数值,然后再将二进制数值转换为八进制数值。

类似地,对于八进制数值,每一位可以表示3个二进制位,而每一位的十进制值可以表示1个二进制位。因此,可以将八进制数值转换为二进制数值,然后再将二进制数值转换为十六进制数值。

所以,在十六进制与八进制数值之间的转换中,常常借助二进制或者十进制作为中间的桥梁。

第34题

同一个整数分别用十六进制和八进制表示后,数值一定不相等。

答案:错误

同一个整数可以用不同进制表示,包括十六进制和八进制。虽然表示形式不同,但数值是相等的。

例如,整数10可以用十六进制表示为0xA,用八进制表示为0o12。虽然表示形式不同,但数值都是10。

所以,同一个整数分别用十六进制和八进制表示后,数值是相等的。

第35题

语句print(“a”,“b”,“c”,sep=“,”)的输出结果是:“a” “b” “c”。

答案:错误

在这个语句中,print()函数接受了三个参数:“a”、“b"和"c”。这些参数会被打印到控制台上,使用逗号分隔。通过设置sep参数为",",我们指定了打印时使用逗号作为分隔符。

因此,输出结果是:“a,b,c”,而不是你所提到的:“a” “b” “c”。

三、编程题(共3题,共30分)

第36题

法定节假日是根据各国、各名族的风俗习惯或纪念要求,由国家法律统一规定的用以进行庆祝及度假的休息时间。法定节假日制度是国家政治、经济、文化制度的重要反映,涉及经济社会的多个方面,涉及广大人民群众的切身利益。法定节假日的休假安排,为居民出行购物和休闲提供了时间上的便利,为拉动内需、促进经济增长做出了积极贡献。给出一个2020年的节假日的放假日期CSV文件(vacations.csv),内容示例如下:

2021年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试_第3张图片

以第1行为例,1230表示12月30日,0101表示1月1日。
代码功能为:读入CSV文件中数据,获得用户输入。根据用户输入的节假日名称,输出此节假日的假期范围。请补全代码。

fi=open("/data/①     ","r")
ls=[]
for line in fi:
    ls.append(line.strip("\n").split(","))
fi.close()
s=input("请输入节假日名称:")
for line in ls:
    if:
        print("{}的假期位于{}-{}之间".format(line[1], line[2], line[3]))

答案:

① vacations.csv (2分)

② s == line[1] (2分)

fi = open("/data/vacations.csv", "r")
ls = []
for line in fi:
    ls.append(line.strip("\n").split(","))
fi.close()

s = input("请输入节假日名称: ")
for line in ls:
    if s == line[0]:
        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)

答案:

① n+1(5分)

② a[i]

③ 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)

当输入一串数字时,代码将其以逗号为分隔符进行分割,得到一个数字列表x。接下来,代码创建了两个空列表a和b,用于存储年龄和顺序。

然后,代码通过循环遍历列表x,将每个数字转换为整数,并将其添加到列表a中。同时,通过每次循环的次数来确定顺序列表b中的元素。

接下来,代码使用两层嵌套循环来比较列表a中的元素,如果前一个元素的年龄小于后一个元素的年龄,则交换它们的位置。同时,也会交换顺序列表b中对应的位置。

最后,代码打印出排序后的年龄列表a和顺序列表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()

答案:

① i + 1 (3分)

② num[i] != 0 (2分)

③ m += 1 (3分)

④ num[i] (2分)

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  # 补全代码,将退出的人员编号置为0
        k = 0
        m += 1  # 补全代码,记录已经退出的人员数量
    i += 1
    if i == n:
        i = 0
i = 0
while num[i] == 0:
    i += 1
print(num[i])  # 补全代码,输出最后留下的人员编号

这段代码的目的是解决约瑟夫环问题。根据输入的总人数,首先创建一个编号列表num,然后通过循环将人员编号添加到列表中。

接下来,使用两个循环来模拟报数和退出的过程。外层循环控制退出的人数,当退出的人数小于总人数减1时,继续循环。内层循环用于报数,每次报数时判断当前位置的人员是否已经退出,如果没有退出,则计数器k加1。当计数器k达到3时,将当前位置的人员编号置为0,表示退出圈子,并将计数器k重置为0。同时,记录已经退出的人员数量m加1。

最后,使用另一个循环找到最后留下的人员编号,并输出结果。

你可能感兴趣的:(python,开发语言,等级考试,电子学会)