2024年12月CCF—GESP(Python四级)编程能力等级认证试卷
四级
2024
2025-05-30 17:30:59
94次
一、单选题
执行下面Python代码后,输出的结果可能是?( )
my_dic = {'a': [1, 2, 3], 'b': (4, 5, 6)}
my_dic['a'][0] = 10
my_dic['b'] += (7,)
print(my_dic) | A. {‘a’: [1, 2, 3], ‘b’: (4, 5, 6, 7)} |
B. {‘a’: [10, 2, 3], ‘b’: (4, 5, 6, 7)} |
| C. {‘a’: [10, 2, 3], ‘b’: (4, 5, 6)} |
D. {‘a’: [10, 2, 3], ‘b’: (4, 5, 6, 7, 7)} |
【知识点】 CCF—GESP Python四级
打开一个由小写英文和数字组成的文本文件notes.txt,将该文件中的每一个字母加密后写入到一个新文件encrypted_notes.txt,加密的方法是:a变成b,b变成c,……,z变成a,其它字符不变化。请在下面程序空白处填上正确内容以实现程序功能。
file = open("notes.txt", "r")
line = file.readline()
list = []
while line:
for i in range(len(line)):
if line[i].islower():
jm = ____________ # 填写代码 ①
list.append(chr(jm))
else:
list.append(line[i])
line = file.readline()
s = ____________ # 填写代码 ②
file = open("encrypted_notes.txt", "w+")
file.write(s)
file.close() | A. ① (ord(line[i]) + 1) % 26 ② ‘’.join(list) |
B. ① ord(‘a’) + (ord(line[i]) + 1 - ord(‘a’)) % 26 ② ‘’.join(list) |
| C. ① (ord(line[i]) + 1) % 26 ② str(list) |
D. ① ord(‘a’) + (ord(line[i]) + 1 - ord(‘a’)) % 26 ② str(list) |
【知识点】 CCF—GESP Python四级
执行下面Python代码后,输出的结果是?( )
items = [('item1', 2), ('item2', 3), ('item3', 1)]
sorted_items = sorted(items, key=lambda x: (-x[1], x[0]))
print(sorted_items) | A. [(‘item3’, 1), (‘item1’, 2), (‘item2’, 3)] |
B. [(‘item1’, 2), (‘item2’, 3), (‘item3’, 1)] |
| C. [(‘item2’, 3), (‘item3’, 1), (‘item1’, 2)] |
D. [(‘item2’, 3), (‘item1’, 2), (‘item3’, 1)] |
【知识点】 CCF—GESP Python四级
小杨相信数字“1”、“3”、“5”能给他带来好运,不喜欢数字“7”。他设计了一个计算数字幸运值的程序。对于数字中的所有字符,字符“1”幸运值为 5,字符“3” 幸运值为 6,字符“5”幸运值为 7,字符“7”的幸运值为-3,其他字符的幸运值为 0,数字的幸运值即为其所有字符的幸运值之和。请在下面程序空白处填上正确内容以实现计算某数字幸运值的功能。
dic = {"1": 5, "3": 6, "5": 7, "7": -3}
num = input("请输入数字:")
ans = 0
for i in range(len(num)):
ch = num[i]
if ____________ : # 填写代码 ①
____________ # 填写代码 ②
print("该数字的幸运值为:", ans) | A. ① ch in dic.values() ② ans += dic[ch] |
B. ① ch in dic.items() ② ans += dic[ch] |
| C. ① ch in dic.keys() ② ans = dic[ch] |
D. ① ch in dic ② ans += dic[ch] |
【知识点】 CCF—GESP Python四级
假设你管理一个实验室,需要记录物品的领用情况。每次领用时,你会记录下领用的日期、物品名称以及领用人的姓名。这个信息将被保存在一个名为lab_issuance.txt的文本文件中。其要求如下:①在文件末尾追加新的物品领用记录;②可以查看当前所有的物品领用记录。请在下面程序空白处填上正确内容以实现程序功能。
def append_record(date, item, name):
with open("lab_issuance.txt", ____________) as file: # 填写代码 ①
file.write(f"{date},{item},{name}\n")
def read_records():
with open("lab_issuance.txt", "r") as file:
records = ____________ # 填写代码 ②
for record in records:
print(record, end="")
# 示例操作
append_record("2024-11-05", "Computer", "Tom")
append_record("2024-11-06", "Pen", "Jack")
read_records() | A. ① “a” ② file.readlines() |
B. ① “a” ② file.readline() |
| C. ① “w” ② file.readlines() |
D. ① “w” ② file.readline() |
【知识点】 CCF—GESP Python四级
执行下面Python代码后,输出的结果是?( )
def double_elements(lst): for i in range(len(lst)): lst[i] *= 2 return lst lstB = [1, 2, 3] double_elements(lstB) print(lstB, double_elements(lstB))
| A. [1, 2, 3] [2, 4, 6] |
B. [2, 4, 6] [4, 8, 12] |
| C. [4, 8, 12] [4, 8, 12] |
D. [1, 2, 3] [4, 8, 12] |
【知识点】 CCF—GESP Python四级
在一个棋盘上,有一堆麦子。根据棋盘的规则,第1格放1粒麦子,第2格放2粒麦子,第3格放4粒麦子,以此类推,每增加一格,麦子的数量翻倍。下列程序用来计算在第 格有多少粒麦子,其中横线处填写的代码为?( )
lst = [0] * 64 lst[1] = 1 def calculate_wheat(n): if n <= 1: return lst[n] i = 2 while i <= n: lst[i] = ____________ # 填写代码 i += 1 return lst[i - 1]
| A. lst[i - 1] * 2 |
B. lst[i - 2] * 2 |
| C. lst[i - 1] + lst[i - 2] |
D. lst[-1] * 2 |
【知识点】 CCF—GESP Python四级
二、判断题
三、编程题
字符排序
时间限制:1.0 s
内存限制:512.0 MB
题面描述
小杨有 n 个仅包含小写字母的字符串s1,s2,...,sn,小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串 t 。小杨希望最后构成的字符串 t 满足:
假设ti为字符串 t 的第 i 个字符,对于所有的j<i 均有tj≤ti。两个字符的大小关系与其在字母表中的顺序一致,例如e<g<p<s。
小杨想知道是否存在满足条件的字符串排列顺序。
输入格式
第一行包含一个正整数 T ,代表测试数据组数。
对于每组测试数据,第一行包含一个正整数 n ,含义如题面所示。
之后 n 行,每行包含一个字符串si。
输出格式
对于每组测试数据,如果存在满足条件的排列顺序,输出 1,否则输出 0。
输入样例
3 3 aa ac de 2 aac bc 1 gesp
输出样例
1 0 0
样例解释
对于第一组测试数据,一种可行的排列顺序为 aa+ac+de,构成的字符串 t 为 aaacde,满足条件。
对于全部数据,保证有1≤t,n≤100,每个字符串的长度不超过 10。
【知识点】 CCF—GESP Python四级
Recamán
时间限制:2.0 s
内存限制:512.0 MB
题目描述
小杨最近发现了有趣的 Recamán 数列,这个数列是这样生成的:
数列的第一项a1是 1;
如果ak−1−k 是正整数并且没有在数列中出现过,那么数列的第 k 项ak为ak−1−k,否则为ak−1+k。
小杨想知道 Recamán 数列的前 n 项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。
输入格式
第一行,一个正整数 n 。
输出格式
一行,n 个空格分隔的整数,表示 Recamán 数列的前 n 项从小到大排序后的结果。
输入样例 1
5 1
输出样例 1
1 2 3 6 7 1
输入样例 2
8 1
输出样例 2
1 2 3 6 7 12 13 20 1
样例解释
对于样例 1,n=5;
a1−2=−1,不是正整数,因a2=a1+2=3;
a2−3=0,不是正整数,因此a3=a2+3=6;
a3−4=2,是正整数,且没有在数列中出现过,因此a4=2;
a4−5=−3,不是正整数,因此a5=a4+5=7;
a1,a2,a3,a4,a5从小到大排序后的结果为 1 2 3 6 7 。
数据范围
对于所有数据点,保证1≤n≤3000。
【知识点】 CCF—GESP Python四级
