万卷网> GESP认证 >Python > 2024年12月CCF—GESP(Python四级)编程能力等级认证试卷

2024年12月CCF—GESP(Python四级)编程能力等级认证试卷
四级 2024 2025-05-30 17:30:59 94

一、单选题

1.

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

A.

Byte

B.

Block

C.

Bulk

D.

Bit

2.

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

A.

天体物理

B.

流体力学

C.

人工智能

D.

量子理论

3.

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

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

Guest

B.

Bob

C.

18

D.

None

4.

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

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

6.

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

7.

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

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

1,2

B.

2,1

C.

抛出异常

D.

None

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
A.

O(n)

B.

O(2n)

C.

O(n2)

D.

O(n3)

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

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="#")
A.

10#

B.

20#

C.

10#30#

D.

20#30#

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()
A.

① “a” ② file.readlines()

B.

① “a” ② file.readline()

C.

① “w” ② file.readlines()

D.

① “w” ② file.readline()

12.

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

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

15#15#

B.

15#5#

C.

5#15#

D.

5#5#

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

14.

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

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

代码正常执行,输出3

B.

抛出TypeError异常

C.

抛出ValueError异常

D.

抛出IndexError异常

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]
A.

lst[i - 1] * 2

B.

lst[i - 2] * 2

C.

lst[i - 1] + lst[i - 2]

D.

lst[-1] * 2

二、判断题

1.

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

A.正确 B.错误
2.

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

A.正确 B.错误
3.

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

def get_max(*args):
	if not args:
		return None
	return max(args)
	
print(type(get_max()))
A.正确 B.错误
4.

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

def func(a, b):
return a + str(b)
A.正确 B.错误
5.

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

A.正确 B.错误
6.

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

print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6, 7, 8])))
A.正确 B.错误
7.

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

A.正确 B.错误
8.

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

a = 5
b = 3
result = (a & b) << 1
print(result)
A.正确 B.错误
9.

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

A.正确 B.错误
10.

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

def fun(n):
	print("Hello, World!")
A.正确 B.错误

三、编程题

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。

公众号
客服 反馈
顶部