【单选题】(每题2分)
1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )
A、小程序 B、计时器 C、操作系统 D、神话人物
正确答案:C
试题解析:操作系统是管理计算机硬件与软件资源的计算机程序,它是计算机系统的核心和基础。
鸿蒙系统(HarmonyOS),是华为公司在2019年正式发布的分布式操作系统。
2、中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是?( )
A、制造自动驾驶汽车 B、创立培训学校 C、发明汉字激光照排系统 D、成立方正公司
正确答案:C
试题解析:王选是中国计算机领域的杰出科学家,他最为人知的贡献是主持研制了汉字激光照排系统。
这一系统标志着中国印刷业从“铅与火”时代迈向了“光与电”时代,是科技体制改革实践探索的重要成果。
3、下列流程图的输出结果是?( )
A、25 B、30 C、35 D、55
正确答案:B
试题解析:这是一个循环结构程序的流程图,i作为循环变量,sum作为累加和变量。
程序的功能是求0到10所有偶数的和,结果为:2+4+6+8+10=30。
4、在Python语言中, hex 函数可以将十进制数转换成十六进制数。执行语句 hex(2024) 后,显示的运行结果是?( )
A、0x7e6 B、0x7e7 C、0x7e8 D、0x7e9
正确答案:C
试题解析:各选项中只有最后一位不同,将2024转换16进制,首先求其个位数,使用2024除以16的余数结果为8,所以个位数为8,答案为选项C。
5、下列说法错误的是?( )
A、字典是通过key(键)来进行访问的,跟列表、元组不同 B、a = {} 是一个空字典
C、{(1, 2): "123"} 的数据类型是字典 D、字典一旦创建不可以被修改
正确答案:D
试题解析:字典是 Python 中的一种数据结构,用于存储键值对。字典是可变的数据类型,即创建后,它可以被修改。
所以,本题答案为选项D。
6、使用 tuple 函数创建元组错误的是?( )
A、a = tuple("1234") B、a = tuple([10, 20, 30, 40]) C、a = tuple(20, 30) D、a = tuple({10, 20, 30, 40})
正确答案:C
试题解析:tuple() 函数将可迭代对象作为参数,并将其转换为元组, tuple() 函数只接受一个参数。
本题答案为选项C。
7、Python代码 print(list(range(1, 10))[1::2]) ,输出结果是?( )
A、上述代码执行报错 B、[1, 3, 5, 7, 9] C、[2, 4, 6, 8, 10] D、[2, 4, 6, 8]
正确答案:D
试题解析:list(range(1, 10)) 创建一个包含整数 1 到 9 的列表。
[1::2] 对列表进行切片操作,从索引为 1 的位置开始,每隔一个元素取值。所以结果为 [2, 4, 6, 8]。
8、下列Python赋值语句错误的是?( )
A、a = {10, 20, 30} * 3 B、a = (10, 20, 30) * 3 C、a = "123" * 3 D、a = [10, 20, 30] * 3
正确答案:A
试题解析:因为集合不支持乘法操作,A 选项错误。
9、执行下列Python代码,输出结果是?( )
a = (1, 9, 3, 6, 3, 8)
a = sorted(a, reverse = True)
print(a)
A、(1, 3, 3, 6, 8, 9) B、(9, 8, 6, 3, 3, 1) C、[9, 8, 6, 3, 3, 1] D、[1, 3, 3, 6, 8, 9]
正确答案:C
试题解析:sorted() 函数对元组 a 进行排序,使用 reverse=True 参数表示降序排列。
所以最终输出结果是 (9, 8, 6, 3, 3, 1)。
10、对于字典 data = {'apple': 3.5, 'banana': 4.0, 'orange': 6.0} ,删除 'banana': 4.0 键值对的正确操作是?( )
A、del data['banana'] B、del data['banana': 4.0] C、del data D、data.remove('banana')
正确答案:A
试题解析:选项 A 使用 del 关键字删除指定键 'banana' 对应的键值对。
选项 B 中的语法是错误的,del 语句后面应该是单个键,而不是键值对。
选项 C 中的语法会删除整个字典,不是删除特定的键值对。
选项 D 中的 remove() 方法用于列表操作,而不是字典。
本题答案为选项A。
11、在三位数的自然数中,找出至少有一位数字是5的所有整数,应在横线填入代码是?( )
count = 0
lst = []
for i in range(100, 1000):
a = i % 10
b = i // 10 % 10
c = i // 100
if a == 5 or b == 5 or c == 5:
________ # 在横线处填写代码
print("这样的三位数有:", lst)
A、lst.extend(i) B、lst.append(i) C、lst.add(i) D、lst += i
正确答案:B
试题解析:在循环中,如果某个三位数的个位、十位或百位数字中有一个是 5,就会将这个数添加到列表 lst 中。
选项 B 中的 append() 方法用于将元素添加到列表的末尾。
12、以下哪个选项可以创建一个列表,包含 1 到 10 的奇数?( )
A、(x for x in range(1, 11) if x % 2 != 0) B、(x for x in range(1, 11) if x % 2 != 0
C、[x for x in range(1, 11) if x % 2 != 0] D、[x for x in range(1, 11)] if x % 2 != 0
正确答案:C
试题解析:使用列表推导式创建列表,选项A、B创建的不是列表,可排除。
选项 D 中的条件判断 if x % 2 != 0 放置在了列表推导式之外,这会导致语法错误。
本题答案为选项C。
13、有一组数据 [20, 0, 7, 0, 31] 存放在 nums 中,希望将列表中的所有零移动到列表尾,应在横线填入代码是?( )
nums = [20, 0, 7, 0, 31]
i, j = 0, 0
while i < len(nums):
if nums[i] != 0:
nums[j] = nums[i]
j += 1
i += 1
nums[j:] = ________
print(nums)
A、[0] * (len(nums) - i) B、[0] * (len(nums) - j) C、[0] * i D、[0] * j
正确答案:B
试题解析:变量 j 表示非零元素的个数,而要将所有零移动到列表尾部,需要将列表末尾的 (len(nums) - j) 个元素替换为零。
本题答案为选项B。
14、执行下列Python程序,最后的输出是?( )
lst = [1, 2, 7, 10, 15, 17, 22]
result = d = 3
for i in range(1, len(lst)):
if lst[i] - lst[i - 1] > d:
result += d
else:
result += lst[i] - lst[i - 1]
print(result)
A、14 B、16 C、18 D、20
正确答案:C
试题解析:程序实现统计相邻元素之间的差值,如果差值大于 3,则只计算 3;如果差值小于或等于 3,则将实际差值加到结果中。
所以统计差的和为:1 + 3 + 3 + 3 + 2 + 3 = 15。
又因为result的初值为3,所以最终结果为:15 + 3 = 18。
15、执行下列Python程序,最后的输出是?( )
s = 'hello world'
words = s.split()
words = [x[::-1] for x in words]
print(" ".join(words))
A、olleh dlrow B、hello world C、world hello D、dlrow olleh
正确答案:A
试题解析:这段代码的功能是将字符串中的每个单词进行逆序输出。
将字符串 s 使用 split() 方法拆分成单词列表。
使用列表解析 [x[::-1] for x in words] 对每个单词进行逆序操作。
最后使用 join() 方法将逆序后的单词列表连接成一个字符串,并以空格分隔。
因此,最后的输出应该是:'olleh dlrow'。
【判断题】(每题2分)
16、任何一个 for 循环都可以转化为等价的 while 循环。( )
正确答案:正确
试题解析:Python中,for 循环适用于已知迭代次数的情况,比如遍历列表或其他可迭代对象。
while 循环适用于未知条件下的循环;
从已知次数的for循环,可以通过增加循环变量将其转换为while循环。
17、小杨今年春节回奶奶家了,奶奶家的数字电视要设置 ip 地址并接入到 WIFI 盒子才能收看节目,那这个 WIFI 盒子具有路由器的功能。( )
正确答案:正确
试题解析:根据题目描述,数字电视需要设置IP地址并接入到WIFI盒子才能收看节目。意味着WIFI盒子具有提供网络接入和分配IP地址的功能,这是路由器的基本功能之一。
18、若 s = ["Hello world", "I love GESP", [2024, 100]] ,则 len(s) 的值为4。( )
正确答案:错误
试题解析:列表 s 包含了三个元素,分别是字符串 "Hello world"、"I love GESP",以及包含两个元素的列表 [2024, 100]。所以 len(s) 的值应该是 3,而不是 4。
19、执行Python代码 print(set([x % 2 for x in range(10)])) ,输出的结果是 {0, 1} 。( )
正确答案:正确
试题解析:x % 2 对0到9的数取余数,结果只有两种可能,0 或 1,将这些余数放入一个集合中,集合会自动去重,只留下不同的元素。
本题答案为正确。
20、Python表达式 5^6 的值是 15。( )
正确答案:错误
试题解析:在Python中,^ 表示按位异或操作,而不是指数操作。因此,5^6 的结果是 3,而不是 15。
21、执行Python代码 print('gesp.ccf.org.cn'.split('.')) ,输出的结果是 ['gesp', 'ccf', 'org', 'cn'] 。( )
正确答案:正确
试题解析:正确。
代码 print('gesp.ccf.org.cn'.split('.')) 会将字符串 'gesp.ccf.org.cn' 按照 '.' 进行分割,得到一个列表 ['gesp', 'ccf', 'org', 'cn']。
22、执行下列Python代码,输出的结果是 None {'Name': '小杨', 'Age': 12, 'Sex': 'female'} 。( )
dict1 = {"Name":"小杨", "Age":13}
dict2 = {"Sex":"female", "Age":12}
dict1.update(dict2)
a = dict1.setdefault("Height", 165)
print(a, dict1)
正确答案:错误
试题解析:dict1.update(dict2) 将 dict2 中的键值对更新到 dict1 中,其中 "Age": 12 会覆盖 dict1 中的 "Age": 13。
然后,使用 dict1.setdefault("Height", 165),如果字典中存在键 "Height",则返回其对应的值,如果不存在,则将键 "Height" 的值设为 165,并返回 165。
输出的结果应该是 165 {'Name': '小杨', 'Age': 12, 'Sex': 'female', 'Height': 165}
23、执行下列Python代码 print((tuple(range(1, 4)) * 3).index(2)) ,输出的结果是 2 。( )
正确答案:错误
试题解析:tuple(range(1, 4)) 创建了一个元组 (1, 2, 3)。
* 3 将这个元组重复了三次,变成 (1, 2, 3, 1, 2, 3, 1, 2, 3)。
.index(2) 会找到元素 2 在元组中第一次出现的索引位置,元素 2 第一次出现在索引位置 1,输出的结果是 1。
24、执行下列Python代码,输出的结果是 ["banana", "apple", "orange"] 。( )
lst = list("banana")
lst.append("apple")
lst.extend("orange")
print(lst)
正确答案:错误
试题解析:首先,lst = list("banana") 将字符串 "banana" 转换为一个由单个字符组成的列表 ['b', 'a', 'n', 'a', 'n', 'a']。
本题答案为错误。
25、执行Python代码 print(list("CCFGESP").reverse()) 与 print(list("CCFGESP")[::-1]) ,其输出的结果相同。( )
正确答案:错误
试题解析:.reverse() 是列表的一个方法,用于反转列表中的元素,即修改原始列表,并且返回值为 None。
[::-1] 是列表的切片操作,表示从末尾到开头的步长为 -1,即反转列表。
前者输出None,后者输出列表的切片,本题答案为错误。
【编程题】
26、字母求和
【问题描述】
小杨同学发明了一种新型密码,对于每一个小写英文字母,该小写字母代表了一个正整数,即该字母在字母顺序中的位置。例如字母 a 代表了正整数 1,字母 b 代表了正整数 2;
对于每一个大写英文字母,该大写字母代表了一个负整数,即该字母的 ASCII 码的相反数。例如字母 A 代表了正整数 -65。
小杨同学利用这种方式对一个整数进行了加密并得到了一个由大写字母和小写字母组成的字符串,该字符串中每个字母所代表数字的总和即为加密前的整数,例如 aAc 对应的加密前的整数为 1+(-65)+3=-61。
对于给定的字符串,请你计算出它对应的加密前的整数是多少。
【输入描述】
第一行一个正整数 n ,表示字符串中字母的个数。
第二行一个由大写字母和小写字母的字符串 T,代表加密后得到的字符串。
【输出描述】
输出一行一个整数,代表加密前的整数。
【样例输入1】
3
aAc
【样例输出1】
-61
对于全部数据,保证有 1 ≤ n ≤ 10^5。
【参考程序】
def solve(s):
sum = 0
for char in s:
ascii_code = ord(char)
if ascii_code >= 65 and ascii_code <= 90:
sum -= ascii_code
elif ascii_code >= 97 and ascii_code <= 122:
sum += (ascii_code -97 + 1)
return sum
n = int(input())
s = input()
print(solve(s))
27、完全平方数
小杨同学有一个包含 n 个非负整数的序列 A,他想要知道其中有多少对下标组合 <i, j>( 1 ≤ i、j ≤n,i < j),使得 Ai + Aj 是完全平方数。
如果 x 是完全平方数,则存在非负整数 y 使得 y × y = x。
【输入描述】
第一行一个非负整数 n ,表示非负整数个数。
第二行包含 n 个非负整数 A1、A2、……、An,表示序列 A 包含的非负整数。
【输出描述】
输出一个非负整数,表示和是完全平方数的非负整数对数。
【样例输入1】
5
1 4 3 3 5
【样例输出1】
3
对于全部数据,保证有 1 ≤ n ≤ 10000,0 ≤ Ai ≤ 10^5。
【参考程序】
n = int(input())
A = list(map(int, input().split()))
ans = 0
for i in range(n):
for j in range(i + 1, n):
num = A[i] + A[j]
tmp = int(num ** 0.5 + 1e-6)
if tmp * tmp == num:
ans += 1
print(ans)