2024年12月CCF—GESP(Python四级)编程能力等级认证试卷
剩余时间 --:--:--
单选题 共 15 题
1.

计算机系统中存储的基本单位用B来表示,比如某个照片大小为3MB,其中B代表的是( )。(2024.12-4)

2.

2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是( )。(2024.12-4)

3.

执行下面Python代码后,输出的结果是?( )

def func(**kwargs):
	return {"name": kwargs.get("name", "Guest"),
		"age": kwargs.get("age", 18)}
		
user = func(name="Bob")
print(user["name"])
4.

执行下面Python代码后,输出的结果可能是?( )

my_dic = {'a': [1, 2, 3], 'b': (4, 5, 6)}
my_dic['a'][0] = 10
my_dic['b'] += (7,)
print(my_dic)
5.

打开一个由小写英文和数字组成的文本文件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()
6.

执行下面Python代码后,输出的结果是?( )

items = [('item1', 2), ('item2', 3), ('item3', 1)]
sorted_items = sorted(items, key=lambda x: (-x[1], x[0]))
print(sorted_items)
7.

执行下面Python代码后,输出的结果是?( )

def func(a, *, b):
	print("{},{}".format(a, b))
func(1, b=2)
8.

以下Python代码实现的排序算法的时间复杂度是?( )

def func_sort(arr):
	for i in range(1, len(arr)):
		key = arr[i]
		j = i-1
		while j >= 0 and key < arr[j]:
			arr[j+1] = arr[j]
			j -= 1
		arr[j+1] = key
9.

小杨相信数字“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)
10.

执行下面Python代码后,输出的结果是?( )

try:
	my_dict = {'a': 1, 'b': 2}
	print(my_dict['c'])
except KeyError:
	print("10", end="#")
else:
	print("20", end="#")
finally:
	print("30", end="#")
11.

假设你管理一个实验室,需要记录物品的领用情况。每次领用时,你会记录下领用的日期、物品名称以及领用人的姓名。这个信息将被保存在一个名为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()
12.

执行下面Python代码后,输出的结果是?( )

z = 5
def outer():
	def inner():
		global z
		z = 15
		
	inner()
	print(z, end="#")
	
outer()
print(z, end="#")
13.

执行下面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))
14.

执行下面Python代码后,会发生什么?( )

my_list = [1, 2, 3]
print(my_list[3])
15.

在一个棋盘上,有一堆麦子。根据棋盘的规则,第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]
判断题 共 10 题
1.

如果在函数内部对一个变量进行赋值操作,那么该变量默认为局部变量。

2.

在Python中,使用 with open(file, ‘w’) as f: 语句打开文件后,即使发生异常,文件资源通常也会被正确关闭。

3.

执行下面Python代码,调用函数get_max可以得到一个None类型的数据。

def get_max(*args):
	if not args:
		return None
	return max(args)
	
print(type(get_max()))
4.

根据下面Python函数定义,调用func()函数时如果参数分别为str和tuple类型,会报错。

def func(a, b):
return a + str(b)
5.

在Windows的资源管理器中为已有文件A建立副本的操作是Ctrl+C,然后Ctrl+V。(2024.12-4)

6.

执行下面Python代码后,输出的结果为[1, 3, 5, 7]。

print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6, 7, 8])))
7.

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

8.

执行下面Python代码后,输出的结果是14。

a = 5
b = 3
result = (a & b) << 1
print(result)
9.

在Python中,已执行 list_of_tuples = [(1, 2), (3, 4)] ,如果执行 list_of_tuples[0][1] = 5将不会报错。

10.

下面这段程序的时间复杂度为常数阶 。

def fun(n):
	print("Hello, World!")
编程题 共 2 题
1.

字符排序

时间限制: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。

2.

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。

C++ 编辑器
输入
输出