2023 年 6 月 GESP Python 三级试卷真题+答案+解析
2023年6月, GESP三级试卷解析出现如下内容: 以每题2分, 共计50分的单选题为例、其中第1题描述为, 经由高级语言编写所打造的对应程序、需历经以下何种操作、就此构建得出可在计算机之上得以运行的有效可执行代码。
A.编辑
B.保存
C.调试
D.编译
【答案】D
【解析】, 本题, 考察, 考生, 对, 程序设计语言, 中, 高级语言, 特点, 的, 了解, 编译, 是, 把, 高级语言, 转换, 成, 可执行代码, 使得, 程序, 能够, 在, 计算机上, 运行, 的, 过程, 调试, 是, 指, 在, 程序开发, 过程中, 找出, 并, 修复, 错误, 和, 问题, 的, 过程。
2. 二进制数 11.01 在十进制下是( )。
A. 3.01
B. 3.05
C. 3.125
D. 3.25
【答案】D
有这样一道题, 它主要考查的是二进制转十进制方面的内容, 采用按权展开、逐项相加这种方法来把二进制转十进制, 在小数点之前, 存在着 2 的 0 次方, 2 的 1 次方这这些情况, 是为了方便进行相应转化的, 是很专业的一种数学运算。
二的次方, 在小数点之后, 依次是乘上二的负一次方, 二的负二次方, 二的负三次方, 那么十一点零一等于一乘以二的一次方加上一乘以二的零次方加上零乘以二的负一次方加上一乘以二的负二次方等于三点二五, 所以本题选择D选项。
3. 下面有关 列表的描述,正确的是( )。
A. 列表的每个成员必须是相同的数据类型
B.一旦确定 列表的成员,不可新增成员
C.不可删除 列表的成员
D.以上说法都不正确
【答案】D
分别加以解析, 本题专门考察考生对于数据类型列表的了解情况, 列表属于一种可变数据类型, 它能够进行增加、删除以及修改等操作, 而且列表当中的元素可以是整数类型、小数类型、字符串类型、列表甚至元组等这几种类型, 全面综合加以考虑之后, 本题选择D选项。
4.下面 赋值语句,不合法的是( )。
A.a,b,c =
B.b = 2, 3, 4
C.d = (3, )
D.以上都合法
【答案】D
分开来看, 本题主要考察列表以及元组的定义, 此处, A选项里是一个多重赋值语句, 它所表达的含意是, 把列表之中的元素赋予不同的变量, 也就是变量a、b以及c;B选项与C选项均属于元组, 需要留意的一件事是, 当定义元组仅仅只有一个元素的时候, 同样也是要添加逗号的;所以在本题里, 几个选项全部都是合法的, 故而选择D选项。
5. 有关下面 代码的描述,正确的是( )。

A.上述代码执行将报错
B.加号运算符不适用 tuple 类型
C.tuple属于不可更改类型, 所以, 两个tuple没办法相加。
D.输出结果是(1, 2, 3, 4)
【答案】D
【解析】这道题主要考的是元组的合并, 元组属于不可变的数据类型, 然而元组之间是支持加号运算符的。元组加上元组意味着元组的合并。首先, 变量a等于元组(1,2) , 接着, 将元组a和(3,4)合并后的内容赋值给a, 最后, 变量a=(1,2,3,4)。所以本题选择D选项。
6. 你的句子不完整呀, 请补充完整后我再按照要求进行改写。
“长城”,“颐和园”
))的值是( )。
A.0
B.2
C.4
D.6
【答案】C
【解析】, 本题主要对字符串、列表以及集合之间所存在的转换情况展开重点考察。set(“长城,颐和园”)得出的结果属于{‘园’, ‘长’, ‘城’, ‘和’, ‘颐’, ‘,’}, 然而set(。
“长城”,“颐和园”
有的结果呈现为{"长城""颐和园"}, 借助len()取得计数后进行相减, 基于此, 本题挑选C选项。
7.下面 代码执行后的输出是( )。

A.
B.
C.
D.执行过程将报错
【答案】D
【解析】该项是以考查遍历列表期间进行删除元素特有情况为主要依托。首先借助len()得出列 表白元素数量是6, 借助for循环对i开展遍历, 其范围是从0至5, 满足i%2==1的存在1、3、5这 三个数字, 首先被删除的是a, 也就是元素2被去除, 而后后续元素会往前移动, 此刻, 列表里已无a这个元素, 后续再实施删除便会产生报错, 所以本题需选择D选项。
8.下面 代码执行后的输出是( )。
A.
B.
C.
D.
1, 2, 3, 4, 5, 6
【答案】D
【解析】, 本题首要考察的, 是 del 方法, del 列表, 意味着删除列表里指定索引的元素, 此外, del 列表, 代表删除整个列表。在这道题目里, del 后删除的, 是一个数字 i, 跟列表 a 并无关联, 所以列表 a 保持不变, 本题应选择 D 选项。“del 变量 ”, 表示删除变量, 在此处能够删除变量 i, 不过每次循环时, 会重新把 a 的一个成员值赋给 i。删除i的值, 不会对a里边的成员的值造成影响, 处于循环状态的时候, 是把a中的成员的值赋予给i, 并非是直接将a中的成员给删除掉。
9.下面 代码执行后的输出是( )。

A.
1, 2, 3, 4, 5, 6
B.
1, 3, 5, 2, 4, 6
C.
2, 4, 6, 1, 3, 5
D.
0, 0, 0, 1, 1, 1
【答案】C
【解析】, 本题主要是对列表.sort()函数, 以及 函数用法的考察。列表.sort()目的是直接对列表之中的元素加以排列, 在指定key参数之时, 列表.sort()函数会运用该参数所设立的函数, 针对列表里的每一个元素予以加工处理, 并且依据处理之后的结果来予以排序。排序会按照处理之后的结果去判定元素的先后次序, 并不是直接针对元素自身做比较。而 函数意味着去创建匿名函数, 其不存在函数名, 仅仅有参数列表以及函数体。
在这道题目的情况里, 针对列表a当中的每一个元 素, 都会对2进行取余操作, 之后按照区域得到的 结果展开排序, 所以在本题之中要选择C选项。需 要留意: 要是存在key参数, 那么排序会依据key 所指定的函数处理每一个成员之后的值开展排序 进而作为排序的根据, 并且并不会对原有的成员 的数值作出修改。
10. 下面 代码执行后的输出是( )。
A.True
B.False
C.1
D.0
【答案】A
拿本题来进行解析, 主要是对集合的特点以及集合的比较展开考察, 集合当中的元素具备无序且不重复这样的特性, 所以, 不管元素的顺序到底怎样, 只要两个集合里的元素是相同的, 那就会被认定为是相等的, 集合set1里含有的元素有2、4、6、8, 集合set2把重复的数字去掉之后是8、6、2、4, 这两个集合的元素是一样的, 因此比较相等得出的结果为True, 故而本题要选择A选项。
11. 下面 代码执行后的输出是( )。
A.(8, 5, 2, 7, 4, 1)
B.
8, 5, 2, 7, 4, 1
C.
8, 7, 5, 4, 2, 1
D.(8, 7, 5, 4, 2, 1)
【答案】B
【解析说明】这个问题的阐述重点是, 针对于 ()反转函数和由 list()进行构成的列表类别转化功能函数特性考察。首先, 要对元组之内部中所形成的元素实施翻转的操作, 紧接着借助 list()这类函数实施转化, 进而形成最终状态下的列表, 其对应的答案表述为。
8, 5, 2, 7, 4, 1
,所以本题选择 B 选项。()只是翻转,不排序。
12. 语句 print(
对于范围在3内的n, 将nn加1后转变为字符串, 接着与n平方加1相乘, 然后再转变为字符串。
)执行后的输出是( )。
A.
’ 1’, ‘22’, ‘55555’
B.
‘22’, ‘55555’, ’ ’
C.
‘22’, ‘55555’
D.执行将报错
【答案】A
首先分开读, 【析解】, 本道题目主要是去考察那一列表推导式的相关内容。在这道题目里, 是运用列表推导式去生成一个列表哦 , 其里面所包含的各个元素呢皆是针对每一个数字n展开计算之后所得到的结果。在当前这个示例范围当中呀 , 数字n具体的取值范围是range(3)这种情况呢 , 也就是0、1以及2这几个数字。针对于每一个n而言呢 , 那个表达式str(nn + 1)(nn + 1)所表示的含义是指呀 , 当把(nn + 1)转变成为字符串的状态之后呢 , 需要重复这个字符串(nn + 1)回才行的这样一种含义。若比如说当n等于0这个时候, (nn加上1)它是等于1的, 在执行str(nn加上1)(n乘以n加上1)之后就变成了 ’1 ’。因而所以在本题当中要选择A选项句号。
13. 下面 代码执行后的输出是( )。

A.a
B.y
C.
D.
【答案】D
【解析】本题着重考查字符串的几个函数运用以及字符串的大小比较。字符串.split()起到拆分作用, 当于括号内不填写参数时, 其默认依据空格进行拆分, 它的返回值是一个列表;字符串.lower()是将字母转换成小写; 此函数表示排序, 将会生成一个新的列表, 在指定 key 参数的情形下, 该函数会运用用此参数所指定的函数针对排序对象里的数据进行逐一处理, 并且依据处理之后的结果来实施排序。
这题里, 起初需运用split()方法予以拆分, 随后依靠指定的key参数str.lower将拆分后的列表之中的元素的字母转换为小写形, 紧接着要开展排序, 其中字符串的排序是按照ASCII值所含大小来进行的, 至终得到的排序结果为此。
‘a’,‘is’,‘’,‘’,‘’,‘’
,所以本题选择 D 选项。
14. 下面 代码执行后的输出是( )。

A. 7
B.5
C.4
D.执行将报错
【答案】C
【解析】本题着重考查列表拼接以及列表与集合转换方面的内容。+对两个列表将作合并处理, 之后被set()进行转换成为集合, 于集合而言, 是由不重复元素构成的, 所以会把列表里重复元素去除掉, 进而统计个数为4, 所以本题选C选项。
15. 现已知, 大写字符,X, 的,ASCII, 编码的,16, 进制表示为,5816, 那么字符,Q, 的十六进制,ASCII, 编码是,()。
A.47
B.51
C.53
D.54
【答案】B
这个题目的解析是, 考查关于ASCII码按照16进制的表示方式, 大写字母X与大写字母Q之间存在间隔7位的情况, 所以要在数58的基础之上直接减去7, 进而得出本题应选择B选项。
二、判断题, 每题, 2分, 共, 20分, 1是, 一个算法, 能够用不同的形式去描述, 不过要求描述较为规范, 所以不能用自然语言进行描述。
【答案】错误
这里是对所说内容进行解析, 此道题目重点考察了算法用于描述的类型, 能够描述算法的形式不一样, 涵盖了自然语言、编写的伪代码以及绘制的流程图等等情况, 很常见用来描述算法的方式是自然语言, 可是它未必会像比较形式化的描述方式那么精准规范的样子, 不过有一些情形下它还是能够挺好地传递算法的思路还有步骤, 所以这道题目是属于错误的情况。
2. 用于标识互联网上一个计算机或计算机组的名称, 是由一串用点分隔的名字构成的, CCF编程能力等级认证官方网站的域名是 , 此域名里顶级域名是gesp。
【答案】错误
【解析】, 本题主要考查, 计算机基础有关的知识。顶级域名, 指的是最右边的字符组, 通常被用于, 去表示国家、地区、组织或者类型等方面的信息。在给定的域名“g ”里面, 顶级域名是“cn”, 其表示中国。所以本题答案是错误。
3. 执行语句a = {}后, 变量a的类型, 有可能是set, 也有可能是dict。
【答案】错误
【解析】, 该项主要是对字典以及集合创建的考察。于其中, 借助大括号{}所创建的, 会被默认诠释成字典(dict)。若要构建一个空的集合, 就得运用set()函数。依此, 本题是错误的。
4. 表达式 len(set(“CCF”))的值为 2。
【答案】正确
【解析】, 本题主要对集合这件事进行考察, 考察内容是集合的创建以及其具备的特点, 集合具有无序性, 并且集合中的元素是唯一的。重复出现的字符会被去除此情况, 所以通过执行set(“CCF”)这个操作所引发的结果是{‘F’, ‘C’}, 之后借助len()这个函数来获取元素的个数, 得出个数为2, 所以针对本题而言此情况属于正确情形。
5. 下面 代码执行后的输出是 is a .

【答案】正确
【解析】, 本题主要是对字符串的特定替换函数进行考察, 字符串的相关函数, 不会对原始字符串作修改, 而是返回一个经过了修改的新字符串, 如此一来, 在这道题目当中, 我们完成替换操作之后进行打印, 打印出来的便是原字符串, 所以本题的答案是正确的。
6. dict类型之中, 其键也就是key能够是tuple类型, 然而不可以是list类型, 所以下面这些代码执行起来不会出现报错。

【答案】正确
解析来看, 本题主要是对字典内容予以考察, 字典的键呢, 具有唯一性这个特性, 并且是一种不可变的类型, 其中列表以及字典是不可以当作字典的键来使用的, 而字符串、数字还有元组都是能够当作字典的键去使用的, 如此一来本题是正确的。
7.下面 代码执行后将输出。
【答案】错误
【解析】, ()函数执行之后, 会展露出一个 ()类型 并且且这种类型呢, 能有力从容地支持相关的for - in这类较为经典常用的循环 另外了, 如果要是打算输出1, 3, 5了, 那么就理所应当的需要把它修改成为print(list((那个以x:x%2,2给定条件所导出的结果形态之中哦)))。
8.下面 执行后的输出是 True。

【答案】错误
【解析】, 本题主要考查, 字符串拆分的特点, 字符串.split(‘分割符 ’), 以指定的分割符, 来对字符串拆分, 不写时默认以空格来拆分, 拆分的结果是一个列表, 需要注意的是, 列表里的每一个元素, 都是字符串类型, 所以本题中, 以逗号拆分后的结果是。
‘ 12’,‘2’
先给a赋值, 之后给b赋值, 赋值完成后, a等于‘12’, b等于‘2’, 由于字符串的大小比较需一个字符接一个字符地比, 因此a。

9. 先是在代码里执行 a = (5,6,3,10)这一步操作, 接着执行 print(a.sort())这一步, 而它的输出结果是 None。
【答案】错误
【解析】, 本题主要是对元组内容展开考察, 元组也就是tuple, 它属于不可变的数据类型, 并不支持sort排序操作, 一旦调用sort函数就会引发一些错误情况的发生, 要是想要为元组予以排序的话, 那么可以借助另外的函数来达成此番需要要达成的目的, 所以说, 本题正确答案判定为错误。这般这般来看待, 是很准确判定该情形情形的。
10. 以下 代码执行后将输出 。
【答案】错误
【解析】, 本题主要考察列表的特点, 在定义好一个列表lstA后, 让lstB等于lstA, 这种新列表直接等于旧列表的情况, 实际上是给lstB赋值, 所赋的值是lstA里储存的列表内容, 这种赋值方法是引用赋值, 也就是两者指向同一个内存, 如此一来, 改变一个列表另一个列表就会跟着改变。于是, 当于lstB添加上元素 ’apple ’后, lstA内里会出现相同的元素, 这个时候再去排序, 基于字符串的排序特点情形下, 排序后的结果变成。
‘apple’, ‘’, ‘grape’, ‘mango’
,所以本题错误。
三、编程题第 1 题
【问题描述】
假设存在一位授课者领着一众同学去进行春季出游活动, 已知在这个班级当中有 N 个同学, 每个同学分别拥有从 0 开始一直到 N 减去 1 的并且是独一无二的编号, 当到达了用以集合的时间之际, 这位授课者要去确认是不是所有同学都抵达了集合的地点, 于是就让同学们依次报出自身的编号, 那些已经到达的同学都会进行报出, 然而存在部分同学比较调皮,会出现多次报出的情况, 那么你能不能帮助这位授课者找出究竟是哪些同学没有到达呢?
【输入描述】
输入含有2行, 第一行含有两个整数, 这两个整数分别是N和M, 它们表示班级里有N位同学, 而同学们一共有M次报出编号, 并且约定2≤N,M≤1000。
第二行当中, 包含着 M 个整数、那些整数是历经 M 次报出的编号, 并且约定了每种编号都处于合理范围之内。
【输出描述】
进行输出, 形成一行内容。要是所有同学都已经到达, 那么就输出N;要是并非所有同学都到达, 那就按照从小到大的顺序, 输出所有还未到达的同学的编号, 而且编号之间用空格进行分隔。
【样例输入 1】
3 3
0 2 1
【样例输出 1】
【样例输入 2】
3 5
0 0 0 0 0
【样例输出 2】
1 2
【题目大意】
在第一行之中, 输入两个数字, 这两个数字分别用来表示同学数量以及报号次数, 于第二行那里, 表示的是同学们所报的号, 去找出没有被报出来的号并将其输出。
【解题思路】
本题主要考察输入多个数据如何进行处理,以及集合的内容。
刚开始, 输入两个数字, 接着进行拆分, 再接着进行转换, 然后分别赋值。之后, 输入 M 个整数, 进行拆分转换, 再通过集合去掉重复的。创建一个集合, 用来表示出正常的编号范围。再进行比较, 判断是不是一致, 按照要求完成输出。
【参考程序】
N , M = map (int,input().split()) #输入应到人数,和报数次数
outSet = set(map (int,input().split()))#报数的集合,已去重,M 没有用上
allNumSet = set(range(N))
if outSet == allNumSet:
print(N)
else:
print(" ".join(map (str,sorted(allNumSet - outSet))))
第 2 题
【问题描述】
若进行网站注册, 那是需要有用户名以及密码的, 要编写程序用以检查用户输入密码的有效性, 合法密码仅能由a到z之间的26个小写字母、A到Z之间的26个大写字母、0到9之间的10个数字以及!@#$这四个特殊字母构成, 密码最短长度为6个字符, 密码最大长度为12个字符, 大写字母、小写字母和数字必须有其中两种, 并且至少要有四个特殊字符中的一个。
【输入描述】
将以英文逗号分隔开来的多个字符组合当作被检测的密码进行输入, 输入那个时候的逗号都作为分隔的符号, 并不被看作是检验密码自身, 特别进行提示, 在常规程序当中, 输入的时候具备提示是一种好习惯, 在考试的时候因为系统存在限定, 输入的时候所有的input()函数都不可以拥有提示信息。
【输出描述】
一行一行地输出, 输出零个或者一个以上, 符合规定的密码, 输出的顺序, 按照输入字符串出现的先后顺序, 也就是先出现的就先输出。
【样例输入 1】
该内容似乎意义不明且包含无意义字符组合, 难以进行有效改写, 可以补充正确合理能理解的语句后重新提交。
【样例输出 1】
!@
$123
【题目大意】
寻求有效的密码相关问题, 进行多个密码的输入操作, 每组密码之间借助逗号予以分隔, 对这些密码是否符合规定进行判别处理, 最后给出符合规定的密码。
【解题思路】
本题主要考察字符串的遍历以及ASCII码的转换内容。
先输入多组密码, 这些密码以逗号间隔开, 接着将其拆分成一个个相互独立的密码, 随后遍历拆分后的列表, 针对遍历所取出的每一个字符串再次展开遍历, 依据ASCII码的转换情况, 分别去求出小写字母、大写字母、数字、规定字符以及其他字符各自的个数, 再依据求出的这些个数来确定密码当中所包含的字符种类, 进而判断其是否合规, 最后按照要求完成输出。
【参考程序】
#密码合规检测
# 1. 首先读取输入的字符串,并按逗号分割成多个待检测的密码列表
pwdList = input().split(",")
# 2. 遍历每个密码进行检测
for itm in pwdList:
# 初始化各类字符的计数器
lowerCount = 0 # 小写字母计数器
upperCount = 0 # 大写字母计数器
digitCount = 0 # 数字计数器
specialCount = 0 # 特殊字符(!@#$)计数器
otherCount = 0 # 其他非法字符计数器
# 3. 遍历密码中的每个字符,进行分类统计
for letter in itm:
# 检查是否为小写字母(a-z)
if ord('a') <= ord(letter) <= ord('z'):
lowerCount += 1
# 检查是否为大写字母(A-Z)
elif ord('A') <= ord(letter) <= ord('Z'):
upperCount += 1
# 检查是否为数字(0-9)
elif ord('0') <= ord(letter) <= ord('9'):
digitCount += 1
# 检查是否为允许的特殊字符(!@#$)
elif letter in "!@#$":
specialCount += 1
# 出现其他不允许的字符
else:
otherCount += 1
break # 一旦发现非法字符,立即退出当前密码的检测
# 4. 计算大写、小写、数字三类中出现的种类数量
triState = 0 # 用于记录出现的类别数量(最多3类)
if lowerCount > 0:
triState += 1 # 有小写字母,加1
if upperCount > 0:
triState += 1 # 有大写字母,加1
if digitCount > 0:
triState += 1 # 有数字,加1
# 5. 检查密码是否符合所有条件:
# - 大写/小写/数字至少出现2类
# - 至少有1个特殊字符
# - 长度在6-12之间
# - 没有其他非法字符
if triState >= 2 and specialCount > 0 and (6 <= len(itm) <= 12) and otherCount == 0:
print(itm) # 符合条件则输出该密码
更多推荐


所有评论(0)