GESP第五次认证真题解析|Python四级真题回顾

四季读书网 1 0
GESP第五次认证真题解析|Python四级真题回顾
GESP第五次认证真题解析|Python四级真题回顾-第1张图片-四季读书网

点击上方蓝字关注我们吧

GESP第五次认证真题解析|Python四级真题回顾-第2张图片-四季读书网

CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。

GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。

本次为大家带来的是20243月认证Python四级真题解析。

GESP20243月认证Python四级

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

题号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

C

C

D

D

D

C

A

B

C

D

D

B

D

A

A

1、⼩杨的父母最近刚刚给他买了⼀块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )

A.小程序

B.计时器

C.操作系统

D.神话人物

【答案】C

【解析】本题属于考察计算机基础知识。鸿蒙是操作系统,操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。它提供了一个让用户与系统交互的界面,可以让用户更方便地使用计算机,同时也让应用程序的编写更为简单。

2、中国计算机学会(CCF)在2024127⽇的颁奖典礼上颁布了王选奖,王选先⽣的重⼤贡献是( )。

A.制造自动驾驶汽车

B.创立培训学校

C.发明汉字激光照排系统

D.成立方正公司

【答案】C

【解析】王选院士是计算机文字信息处理专家,计算机汉字激光照排技术创始人,国家最高科学技术奖获得者,中国科学院学部委员、中国工程院院士,北京大学计算机研究所原所长。其主持研制的汉字激光照排系统用于书刊、报纸等正式出版物的编排,为新闻出版全过程的计算机化奠定了基础。

3、下面有关Python的说法,正确的是( )

A. Python是低级程序设计语⾔,适合初学者

B. Python⼀门编译型语⾔

C.C/C++Java⼀样,Python也是静态类型的语⾔

D. Python是脚本型程序设计语⾔

【答案】D

【解析】本题属于考察编程语言基础知识。Python是一种高级编程语言,多范式编程语言,支持面向对象、命令式、函数式和过程式编程,属于脚本型程序设计语⾔。

4、有关Python语句print(3,2,sep='#')说法错误的是( )

A. 32称之为位置参数

B. sep称之为命名关键字参数

C. 32称之为变参参数

D. sep参数可以放在32之前

【答案】D

【解析】本题属于考察Python内置函数print()函数参数的知识。

"变参参数"通常是指在函数定义中使用*args来收集任意数量的位置参数。在这个print函数调用中,函数依次接受任意数量的位置参数和一个关键字参数。因此32是位置参数,同时也是变参参数,传入几个位置参数都可以。在Python函数调用中,关键字参数(如sep='#')必须在位置参数(如32)之后。

5、下⾯Python代码执⾏后,第4⾏输出是( )

GESP第五次认证真题解析|Python四级真题回顾-第3张图片-四季读书网

A. [1, 2] [1, 2] [1, 2, 1, 2, 1, 2]

B. [1, 100] [1, 100] [1, 100, 1, 100, 1, 100]

C. [1, 100] [1, 2] [1, 2, 1, 2, 1, 2]

D. [1, 100] [1, 100] [1, 2, 1, 2, 1, 2]

【答案】D

【解析】本题考察的关键点是列表的赋值是引用传递,修改lstA也会影响lstB,但不会影响lstC,因为lstC是通过列表乘法创建的一个新列表,它与lstA的当前状态没有关联。

按执行顺序,在这段代码中,首先创建了一个列表lstA,然后创建了两个新列表lstBlstClstB, lstC = [lstA, lstA * 3] ,其中lstA * 3 会创建一个新列表,lstA的内容重复三次组成,即[1, 2, 1, 2, 1, 2]lstA作为一个元素赋值给lstB,所以lstBlstA引用的是同一个列表对象[1, 2]lstA[1] = 100 修改了lstA列表的第二个元素,所以lstA现在是[1, 100]

print(lstA, lstB, lstC) 打印出修改后的lstA,以及lstBlstC的内容。因为lstBlstA的一个引用,所以lstB的内容也会显示为[1, 100]lstC是在修改lstA之前创建的,因此它的内容仍然是[1, 2, 1, 2, 1, 2]。因此,正确答案是D

6、下⾯Python代码最后执⾏后最后⼀⾏输出是( )

GESP第五次认证真题解析|Python四级真题回顾-第4张图片-四季读书网

A. [2, 6, 10, 14, 18] [1, 3, 5, 7, 9]

B. [1, 3, 5, 7, 9] [2, 6, 10, 14, 18]

C. [2, 6, 10, 14, 18] [2, 6, 10, 14, 18]

D. [1, 3, 5, 7, 9] [1, 3, 5, 7, 9]

【答案】C

【解析】本题属于考察Python函数参数、作用域的知识。lstA的初始值是[1, 3, 5, 7, 9]Foo(lstA)调用了函数Foo,并将lstA作为参数传入。

Foo函数中,我们使用for i in range(len(lst)): 遍历列表的每个索引。

lst[i] *= 2 这行代码将列表lst中当前索引i的元素值翻倍并传入的列表lst(这里是lstA)。

函数完成后,返回修改后的列表lstprint(Foo(lstA), lstA) 打印了函数Foo的返回值和lstA的当前值。由于lstA在函数Foo中被修改,两者将打印相同的结果。由于lstA中的每个元素都被翻倍,结果列表将是[2, 6, 10, 14, 18]。因此,print(Foo(lstA), lstA) 输出的正确答案是C

7、下⾯Python代码执⾏后输出是( )。

GESP第五次认证真题解析|Python四级真题回顾-第5张图片-四季读书网

A. 3 [1, 2, 3]

B. 3 3

C. [1, 2, 3] [1, 2, 3]

D. [1, 2, 3] 3

【答案】A

【解析】本题属于考察Python函数参数、作用域的知识。无论函数传递的参数的可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用。在函数Foo内部,参数lst被重新赋值为传入列表的长度。由于传入的列表有三个元素,len(lst)的结果是3。函数Foo返回这个长度值3

print(Foo(lst), lst) 语句将打印函数Foo的返回值和原始的lst列表。因此,正确答案是A

8、下⾯Python代码执⾏后输出是( )。

A. 3, 1

B. (3, 1)

C. 3

D.报错。因为第2⾏只能返回⼀个值,不可以是两个值

【答案】B

【解析】本题属于考察Python函数参数、作用域的知识。DIV函数定义了两个参数mn,分别代表要进行除法运算的两个整数。return m // n, m % n执行结果是m除以n的商,只保留整数部分和m除以n的余数。当DIV(10, 3) 被调用时,它将m设置为10n设置为310整除3 (10 // 3) 的结果是3,因为3乘以3等于9,是不超过10的最大的3的倍数。10除以3的余数(10 % 3) 1,因为10减去933倍)等于1。要注意的是,如果返回多个参数,是将多个参数封装为tuple。因此,正确答案是B

9、Python代码 print({(i,i ** 2) for i in range(5)}) 执⾏后可能输出是( )

A. ((0, 0), (1, 1), (2, 4), (3, 9), (4, 16))

B. [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]

C. {(2, 4), (4, 16), (0, 0), (1, 1), (3, 9)}

D. {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

【答案】C

【解析】本题属于考察Python集合推导式。集合中的每个元素是一个元组,包含一个来自range(5)的数字i及其平方i ** 2range(5)生成一个包含从04的整数序列。因此,对于这个序列中的每个数字i,都会计算ii ** 2 并将它们作为一个元组放入集合中,即{(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)},但是集合是无序的,所以当你运行代码时,输出的元组顺序可能与上述顺序不同。因此,正确答案是C

10、下⾯Python代码执⾏,其输出是( )。

GESP第五次认证真题解析|Python四级真题回顾-第6张图片-四季读书网

A. True True True True

B. True False False True

C. False False False False

D. True True False True

【答案】D

【解析】本题属于考察Python变量赋值及列表的浅拷贝。A is B检查的是AB是否是同一个对象的引用,由于B被直接赋值为A,所以A is B 的结果是TrueA == B检查的是AB的值是否相等,由于BA的一个引用,它们指向同一个列表,所以它们的值当然相等。A is C检查的是AC是否是同一个对象的引用,C是通过A[:]创建的,这实际上是创建了A的一个浅拷贝。虽然C的内容与A相同,但C是一个新的列表对象,因此它们不是同一个对象的引用。A == C检查的是AC的值是否相等。尽管C是一个新的列表对象,但它具有与A相同的元素。因此,正确答案是D

11、在Python中,对listtuplestr类型执⾏in运算,其时间复杂度均为( )。

A. O(N)

B. O(N2)

C. O(1)

D. 非上述备选答案

【答案】D

【解析】本题属于考察冒泡算法复杂度的估算知识。在Python中,对于列表(list)、元组(tuple)类型执行in运算时,它们的时间复杂度通常是O(n),其中n是容器的长度。这是因为in运算符需要在这些数据结构中进行线性搜索来检查元素是否存在。但是对于字符串(str),情况就复杂很多,字符串的 in 运算符检查一个子字符串是否存在于一个更大的字符串中。这通常涉及一个更复杂的算法,如朴素的子字符串搜索的时间复杂度是O(nm),其中n是字符串的长度,m是子字符串的长度。然而,Python中可能使用了更高效的算法(如KMP或其他算法),这些算法在平均情况下可以提供接近O(n)的性能,但最坏情况下仍然可能是O(nm)。因此,正确答案是D

12、下列Python代码⽤于寻找1~100之间的因数最多的数及其因数,程序本意是factor变量存储形如{6:[1,2,3,6],8: [1,2,4,8]}。下⾯有关说法正确的是()。

GESP第五次认证真题解析|Python四级真题回顾-第7张图片-四季读书网A.  程序第5⾏存在语法错误,因为append()的返回值为None

B.  程序第5⾏存在语法错误,当某个数第1次作为factorkey时,其对应的值为append()的返回值即None,当该数第2次作为factorkey时,factor.get(i,[])返回值为None不再是[]append()不能成其为函数

C.  程序第6⾏存在语法错误,因为max()不能有key参数

D.  程序第6⾏存在语法错误,max()虽然可以有key作为参数,但其中lambda函数存在语法错误

【答案】B

【解析】本题属于考察Python复合数据类型的嵌套知识。max()函数完全可以接受一个key参数,这是用于指定如何比较元素的。在这个例子中,key参数用于比较每个键值对中值的长度,即因数列表的长度。lambda x:len(x[1])是一个合法的lambda函数,它返回了每个键值对中值(因数列表)的长度,这样max()函数就可以根据因数最多的数来确定最大值。对于Bappend()函数执行后的返回值为None,并赋值给factor[i],因此,题目中的描述正确,正确答案是B

13、在如下Python代码中,假设变量zen代表很多字符此处仅为⽰例,代码实现按⼩写字母频次升序,如频次相同则按字符ASCII升序输出,横线处应填入是( )。

GESP第五次认证真题解析|Python四级真题回顾-第8张图片-四季读书网

A. alphaCount[c]+= 1

B. alphaCount[c.lower()]+= 1

C.alphaCount[c.lower]= alphaCount.get(c.lower,0)+ 1

D. alphaCount[c.lower()]= alphaCount.get(c.lower0,0)+ 1

【答案】D

【解析】本题属于考察Python复合数据类型的嵌套,lambda表达式和。选项A中的alphaCount[c] += 1没有考虑到字母的大小写。选项B中的alphaCount[c.lower()] += 1正确地将字符转换为小写,但是这行代码在alphaCount字典中不存在键c.lower()时会引发KeyErrorC中的alphaCount[c.lower] = alphaCount.get(c.lower,0) + 1存在两个问题:首先,它使用了c.lower而不是c.lower(),这意味着它尝试获取函数lower的引用而不是调用该函数;其次,它错误地使用了赋值而不是增加操作。因此,正确答案是D

14、下⾯Python代码能正确执⾏。在代码被执⾏之前,abc.txt已经存在,其⽂件字节数为100。下⾯有关说法, 正确的是( )。

GESP第五次认证真题解析|Python四级真题回顾-第9张图片-四季读书网

A. abc.txt的内容将被覆盖,但由于没有写⼊操作,⽂件字节数为0

B. abc.txt的内容不会被覆盖,因为没有执⾏任何⽂件写⼊操作,abc.txt将继续原样存在

C.abc.txt的内容将被复制到abc.bak之中,然后覆盖abc.txt,由于没有写⼊操作,因此⽂件字节数为0

D. abc.txt将被删除,因为第⼀⾏代码执⾏后,原⽂件内容将被删除,但由于没有写⼊操作,因此abc.txt将不会存在

【答案】A

【解析】本题属于考察计算机文件操作知识,写入模式("w")打开一个文件时,如果文件已经存在,其内容会被立即清空。因此,当执行open("abc.txt", "w")这行代码时,abc.txt文件里原有的内容将被清空。由于在wFile.close()之前没有进行任何写入操作,文件的大小将是0字节。因此,abc.txt的内容将被覆盖,文件大小为0字节。因此,正确答案是A

15、下列Python代码执行后,将输出的是( )

GESP第五次认证真题解析|Python四级真题回顾-第10张图片-四季读书网

A.  0#2#

B.  0#1#2#

C.  1#2#

D.  0#

【答案】A

【解析】本题属于考察函数定义和调用。print(10/0) # =会直接触发ZeroDivisionError异常。print(0, end="#")  # 因为捕获到了ZeroDivisionError,所以这里会打印0#print(2, end="#") # finally 块总是会被执行,所以这里会打印2#。因此,正确答案是A

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

题号

1

2

3

4

5

6

7

8

9

10

答案

×

×

×

1、何⼀个for循环都可以转化为等价的while循环。( )

【答案】√

【解析】for循环和while循环是两种基本的循环结构,它们在功能上是等价的,意味着任何使用for循环编写的算法都可以使用while循环来重写。

2、⼩杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接⼊到WIFI盒⼦才能收看节⽬,那这个WIFI

⼦具有路由器的功能。( )

【答案】√

【解析】所谓的"WIFI盒子"通常指的是无线路由器,它能够提供无线网络接入点,让周围的设备如电视、手机、电脑等通过无线方式连接到互联网。

3、⼩杨在练习Python准备GESP考试的过程中,发现如果执⾏import os,可以通过os.system()启动外部程序,因此也可以说Python是⼀个⼩型操作系统。( )

【答案】×

【解析】虽然Pythonos模块提供了许多与操作系统交互的功能,例如os.system()函数可以用来运行操作系统的命令,但这并不意味着Python本身是一个操作系统。

4、在Python中,任何⼀个while循环都可以转化为等价的for循环( )。

【答案】×

【解析】while循环和for循环在许多情况下可以互相转换,因为它们都是用来重复执行一段代码直到满足特定条件为止。但是并不是所有的while循环都可以转换为等价的for循环,有些基于复杂条件或动态条件的while循环不能直接转换为for循环。

5、在Python中,list类型有sort()函数,但tuplesetdict则没有sort()函数。( )

【答案】√

【解析】在Python中,list类型确实有一个sort()方法,该方法用于原地排序列表,不返回任何值(返回None),而其他几个函数没有sort()方法。

6、当对listtuple类型执⾏in运算时,其时间复杂度为O(N)。( )

【答案】√

【解析】对于listtuple类型,执行in运算(即成员资格测试)时,Python会按顺序遍历整个列表或元组来检查是否包含指定的元素。这个操作的平均时间复杂度是O(N),其中N是列表或元组中元素的数量。

7、在Python中,[i*2 for i in range(10) ]*3 是合法的表达式。( )

【答案】√

【解析】[i*2 for i in range(10)]*3 是一个合法的表达式,包含了两部分:列表推导式[i*2 for i in range(10)]*3:这个操作会将列表重复3次,因此,这个表达式首先计算出一个包含10个元素的列表并重复3.

8、在下⾯Python代码中,⽂本⽂件abc.txt共有10⾏,每⾏由1个英⽂半角字母组成。第5⾏代码执⾏后其输出为10。( )

GESP第五次认证真题解析|Python四级真题回顾-第11张图片-四季读书网

【答案】×

【解析】文件的总内容将包括10个英文半角字母和9个换行符,因为最后一行可能没有换行符,总共会有19个字符

9、在Python中,已执行tpl = ([1,2],[3,4],[5,6]) ,如果执行tpl[1] = [99,100] 将报错,而执行tpl[1][1] = [99,100] 则不会报错。( )

【答案】√

【解析】tpl是一个元组,元组是不可变的数据类型,但元组中包含列表时可以修改,给定的代码tpl = ([1,2], [3,4], [5,6]) 创建了一个包含三个列表的元组。尝试修改元组中的一个元素,如tpl[1] = [99,100],将会导致类型错误,因为不能改变元组tpl中的元素。但是可以修改元组中列表的内容,因为列表是可变的。所以,执行tpl[1][1] = [99,100] 将会成功

10、在Python中,表达式len(set("China")^set("china"))的值为2。( )

【答案】√

【解析】set("China")set("china")分别创建了两个集合。集合中的元素是唯一的,且集合是无序的。字符串"China""china"中的字母被转换成集合时,大小写是区分的。使用^运算符,也称为对称差集,会得到两个集合中不重叠的元素组成的新集合。在这个例子中,'C''c'是不重叠的元素,因为集合是区分大小写的。因此,set("China")^set("china")的结果是{'C', 'c'}。这个新集合的长度是2

三、编程题(每题25分,共50)

题号

1

2

答案



1、相似字符串

题面描述

对于两个字符串AB,如果A可以通过删除一个字符,或插入一个字符,或修改一个字符变成B,那么我们说AB是相似的。

比如apple可以通过插入一个字符变成applee,可以通过删除一个字符变成appe,也可以通过修改一个字符变成bpple,因此appleappleeappebpple都是相似的。但applee并不能通过任意一个操作变成bpple,因此它们并不相似。

特别地,完全相同的两个字符串也是相似的。

给定TA,B,请你分别判断他们是否相似。

输入描述

第一行一个正整数T

接下来T行,每行两个用空格隔开的字符串AB。保证T100A,B的长度不超过50保证AB只包含小写字母。

输出描述

输出T行,对于每组A,B,如果它们相似,则输出similar,否则输出not similar

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

样例输入1

GESP第五次认证真题解析|Python四级真题回顾-第12张图片-四季读书网

样例输出1

GESP第五次认证真题解析|Python四级真题回顾-第13张图片-四季读书网

【题目大意】

题目要求输入T组字符串和B,判断两个字符串AB是否相似。如果A可以通过删除一个字符、插入一个字符或修改一个字符变成B,那么AB是相似的。根据判断结果输出"similar""not similar"

【解题思路】

1.比较两个字符串的长度,如果长度差大于1,则直接返回False,因为这种情况下无法通过单一操作使得两个字符串相似。

2.如果两个字符串长度相等,那么遍历两个字符串,统计不同字符的个数。如果不同字符的个数小于等于1,则可以通过修改一个字符使得两个字符串相似,返回True

3.如果两个字符串长度不等,那么分别标记较短和较长的字符串为shorterlonger。然后同时遍历两个字符串,使用两个指针ij分别代表shorterlonger的索引。如果两个索引指向的字符不同,则longer字符串的指针j前进一步,shorter字符串的指针i保持不变,这代表尝试在shorter中插入一个字符或在longer中删除一个字符。如果字符相同,则两个指针都前进一步。如果在任何时候不同字符的个数超过1,则返回False

4.如果所有的条件判断都通过,则返回True,表示字符串AB是相似的。

【参考程序】

GESP第五次认证真题解析|Python四级真题回顾-第14张图片-四季读书网

2、做题

问题描述

小杨同学为了提高自己的实力制定了做题计划,在第k天时,他必须要完成k道题,否则他就会偷懒。

小杨同学现在找到了一个题库,一共有"套题单,每一套题单中有一定数量的题目。但是他十分挑剔,每套题单他只会使用一次,每一天也只能使用一套题单里的题目,之后那套题单就会被弃之不用。对于每套题单,他不必完成题单内所有的题。

那么问题来了,小杨同学最多会做题几天才偷懒呢?

输入格式

第一行,1个数为n,表示有多少套题单。

第二行,n个整数a1,a2....,an,分别表示每套题单有多少道题。

输出格式

输出一行,小杨同学偷懒前最多做题天数。

样例1

GESP第五次认证真题解析|Python四级真题回顾-第15张图片-四季读书网

对于全部数据,保证有1 ≤ n ≤ 106,1 ≤ai≤ 109

【题目大意】

这个题目是一个关于贪心算法的应用问题。第一行输入一个整数n,表示题库中题单的总数。第二行输入n个整数,每个整数代表一套题单中题目的数量。最后输出一个整数,表示小杨最多能连续做题的天数。

【解题思路】

1.输入题单总数n

2.输入每套题单的题目数量,并存入列表A

3.对列表A进行排序,以便能够优先使用题目数量少的题单。

4.初始化day1,表示第一天,初始化idx0,表示题单的索引。

5.使用while循环,条件为idx小于n,循环体内进行如下操作:--检查当前题单的题目数量是否满足当天需要解决的题目数量,即A[idx]是否大于等于day--如果满足,day1,表示小杨可以进入下一天继续做题。--不管是否满足,都将idx1,表示将考虑下一套题单。

6.循环结束后输出day - 1,因为在最后一次循环中,day被多加了1,所以需要减去。

【参考程序】

GESP第五次认证真题解析|Python四级真题回顾-第16张图片-四季读书网

技术支持:赵询

策划:GESP技术委员会副主席 刘晓庆

GESP第五次认证真题解析|Python四级真题回顾-第17张图片-四季读书网

GESP第五次认证真题解析|Python四级真题回顾-第18张图片-四季读书网

GESP第五次认证真题解析|Python四级真题回顾-第19张图片-四季读书网
GESP第五次认证真题解析|Python四级真题回顾-第20张图片-四季读书网
联系方式

1. GESP微信:关注“CCF GESP公众号,点击“GESP小助手”即可交流。

2. GESP邮箱:gesp@ccf.org.cn

注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。

3. GESP电话:0512-67656856

咨询时间:周一至周五(法定节假日除外)上午 8:30-12:00;下午 13:00-17:30

扫码关注GESP公众号,了解更多资讯

GESP第五次认证真题解析|Python四级真题回顾-第21张图片-四季读书网
GESP第五次认证真题解析|Python四级真题回顾-第22张图片-四季读书网

抱歉,评论功能暂时关闭!