内容正文:
青少年软件编程(Python)等级考试试卷(二级)
202203真题与解析
分数:100 题数:37 测试时长:60分钟
一、单选题(共25题,每题2分,共50分)
1.关于Python中的列表,下列描述错误的是?( )
A.列表是Python中内置可变序列,是若干元素的有序集合;
B.列表中的每一个数据称为“元素”;
C.在Python中,一个列表中的数据类型可以各不相同;
D.可以使用s[1]来获取列表s的第一个元素。
2.已知列表a=[1,3,5,7],下列语句无法将a变成a=[1,3,5,7,9]的是?( )
A.a.append(9)
B.a=[1,3,5,7,9]
C.a.insert(4,9)
D.a[4]=9
3.关于以下代码段的说法错误的是?( )
a = [1, 2, 5, 4, 3]
a.sort(reverse=True)
print(a)
A.a.sort(reverse=True)语句中的reverse默认值为False。
B.a.sort(reverse=True)语句中的reverse=True,代码运行结果不变。
C.将以上代码的a.sort(reverse=True)改为a=sorted(a,reverse=True),代码运行结果和原题的结果一样。
D.以上代码运行结果为:[5, 4, 3, 2, 1]。
4.下面程序的运行结果是?( )
a=80
b=70
if a>b:
a,b=b,a
print(a,b)
A.70 70
B.80 70
C.70 80
D.80 80
5.以下关于元组的描述正确的是?( )
A.元组和列表相似,所有能对列表进行的操作都可以对元组进行
B.创建元组时,若元组中仅包含一个元素,在这个元素后可以不添加逗号
C.元组中的元素不能被修改
D.多个元组不能进行连接
6.以下程序的输出结果是?( )
tuple1 = (1,2,3)
tuple2 = (2)
print(tuple1*tuple2)
A.(1,2,3)
B.(1,2,3,1,2,3)
C.(2,4,6)
D.报错
7.以下代码的输出结果是?( )
ls = []
for m in '想念':
for n in '家人':
ls.append(m+n)
print(ls)
A.["想念","家人"]
B.["想想","念念","家人"]
C.["想家想","人念家","念人"]
D.["想家", "想人", "念家", "念人"]
8.以下程序的输出结果是?( )
lt = ['绿茶','乌龙茶','红茶','白茶','黑茶']
ls = lt
ls.clear()
print(lt)
A.[]
B.变量未定义的错误
C.['绿茶','乌龙茶','红茶','白茶','黑茶']
D.'绿茶','乌龙茶','红茶','白茶','黑茶'
9.下面代码的输出结果是?( )
list1 = [1,2,3]
list2 = [4,5,6]
print(list1+list2)
A.[4,5,6]
B.[1, 2, 3, 4, 5, 6]
C.[1,2,3]
D.[5,7,9]
10.字符串str="maixnm"包含"min"和"max"两个单词,下面哪个操作不能将"min"从中找出来?( )
A.str1=str[0]+str[2]+str[4]
B.str1=str[0:-1:2]
C.str1=str[::2]
D.str1=str[0:4:2]
11.cat=['fat','black','cloud'],则cat.index('black')的值为?( )
A.1
B.2
C.3
D.0
12.3年级2班的学生花名册被存储在一个列表name中,如何快速得到该班级学生的总人数?( )
A.print(sum(name))
B.print(len(name))
C.print(min(name))
D.print(max(name))
13.小张的爸爸每个月都有绩效工资,绩效工资根据业绩被分为1200、1400和1600三个等级,小张把爸爸每个月的绩效工资都记录在了一个money的列表中,如何能快速得到小张爸爸得到1600元绩效的次数?( )
A.money.index(1600)
B.money.count(1600)
C.money.remove(1600)
D.money.insert(0,1600)
14.name=('Jerry',),则name的数据类型是?( )
A.字符串
B.元组
C.列表
D.其他类型
15.d1={'学科':'语文','班级':'2班','最高分':99}
d2={'学科':'数学','班级':'2班','最高分':100}
d1.update(d2)
print(d1)
以上代码的运行结果为?( )
A.{'学科':'语文','班级':'2班','最高分':99}
B.{'学科':'语文','班级':'2班','最高分':100}
C.{'学科':'数学','班级':'2班','最高分':100}
D.{'学科':'数学','班级':'2班','最高分':99}
16.小明用一个字典d={'语文':88,'数学':92,'英语':'96'}来储存他的期末考试成绩。则小明的总分是?( )
A.s=0
for i in d.values():
s=s+int(i)
print(s)
B.s=0
s=sum((d.values())
print(s)
C.s=0
while i<len(d):< p="">
s=s+int(d.values())
print(s)
D.s=0
for i in d():
s=s+int(i.values())
print(s)
17.如果要计算1*2*3*4*5*6*7*8*9则下列程序代码正确的是?( )
A.
s=0
for i in range(1,10):
s=s*i
print(s)
B.
s=0
for i in range(1,9):
s=s*i
print(s)
C.
s=1
for i in range(1,10):
s=s*i
print(s)
D.
s=1
for i in range(1,9):
s=s*i
print(s)
18.执行下列代码后,运行结果是?( )
d={'1':1,'2':2,'3':3,'4':4}
b=d
b['2']=5
print(d['2']+b['2'])
A.4
B.5
C.7
D.10
19.若dic_color={'red':'红色','green':'绿色','gold':'金色','brown':'棕色','purple':'紫色'},以下选项中能够输出'金色'的是?( )
A.print(dic_color['gold'])
B.print(dic_color['金色'])
C.print(dic_color[2])
D.print(dic_color.values[2])
20.以下程序执行的结果是?( )
a=0
b=5
Sum=0
for i in range(3):
if a>0:
Sum+=a
a+=1
elif b>1:
Sum+=b
a+=1
b+=1
print(Sum)
A.7 B.9 C.11 D.12
21.想得到的输出为"My name is Kevin and I am 10 years old."以下选项正确的是?( )
A.print('My name is %s and I am %d years old.',%('Kevin',10))
B.print('My name is %s and I am %d years old.'%('Kevin',10))
C.print('My name is %c and I am %d years old.'%('Kevin',10))
D.print('My name is %s and I am %d years old.'%',Kevin',%10))
22.编写一段猜密码程序,只允许猜三次,当猜中密码时,提示“密码正确”,程序退出。当输入密码错误时,提示“密码错误”,并提示剩余次数。程序空白处应填写的条件是?( )
A.abc>0
B.abc>=0
C.abc==0
D.abc!=3
23.已知a=list(range(10)),执行以下指令后,a的值会变成?( )
a[:2]=[5]
a.pop(5)
a.remove(5)
A.[2, 3, 4, 5, 7, 8, 9]
B.[2, 3, 4, 7, 8, 9]
C.[2, 3, 4, 6, 7, 8, 9]
D.[5, 2, 3, 4, 5, 7, 8, 9]
24.以下选项中,不能用于表示分支结构的python函数是?( )
A.if
B.else
C.in
D.elif
25.执行以下程序
a=range(1,10)
for i in a:
if i%2 == 0:
print(i)
运行结果为?( )
A.1 3 5 7 9
B.1 4 7
C.2 4 6 8
D.2 5 7 9
二、判断题(共10题,每题2分,共20分)
26.已知Money=8.6675 , print("工资{0:.2f}".format(Money)),结果是:"工资8.67".( )
27.在使用format()函数对字符串进行格式化时,参数索引从1开始.( )
28.while语句只能用于未知次数的循环,for语句只能用于循环次数己知的循环.( )
29.t=(1,2,3,4,2),则print(t.index(2))的运行结果为1.( )
30.若s=(1,2,3,4,5),则执行s.remove(5)语句后,s的值是(1,2,3,4).( )
31.Python语言用缩进来标识语句块,同一级语句块中的语句具有相同的缩进量.( )
32.表达式[3] in [1,2,3]的值为True.( )
33.break语句执行后,将跳出程序所有的循环,程序结束.( )
34.字典中的键和值必须用冒号隔开,同一个字典中的所有键都必须是唯一的.( )
35.以下程序的运行结果为 5()
a=6
b=5
if a>b:
print(a)
else:
print(b)
三、编程题(共2题,共30分)
36.实现统计字符串中的单词和单词出现的次数:
要求如下:
(1)统计的语句为:to be or not to be that is a question
(2)要求统计该句中出现的所有单词和其出现次数。
(3)使用字典进行输出,格式如下(注意:排列顺序可以不一致,但是统计的次数要正确):
{'to': 2, 'be': 2, 'or': 1, 'not': 1, 'is': 1, 'a': 1, 'question': 1, 'that': 1}
37.可以对任何一个自然数进行若干次运算,最终都可以变为1。
运算规则如下:
(1)若该数是偶数,则变为原数的一半;
(2)若该数是奇数,则变为原数的3倍加1;
(3)重复(1)(2),直到该数变为1。
编写程序实现如下功能:输入一个大于1的自然数,计算按照上述方法最终变换为1共经过的变换次数,并输出变换次数。(输出格式为:直接输出次数即可)
示例1:若输入自然数8,则输出结果为:3。
示例2:若输入自然数5,则输出结果为:5。
参考答案及解析:
一、单选题答案及解析
1. D
- 解析:可以使用`s[0]`来获取列表`s`的第一个元素,选项 D 错误。A、B、C 选项对列表的描述正确。
2. D
- 解析:选项 D,若列表`a=[1,3,5,7]`,`a[4]=9`会报错,因为索引 4 超出了列表的范围。A 选项`append(9)`在列表末尾添加元素 9;B 选项直接重新赋值列表;C 选项`insert(4,9)`在索引 4 处插入元素 9。
3. B
- 解析:`a.sort(reverse=True)`中的`reverse=True`会使列表降序排列,与默认值`False`(升序排列)结果不同,选项 B 错误。A 选项`reverse`默认值为`False`正确;C 选项`sorted(a,reverse=True)`也能实现降序排列,结果与原题一样正确;D 选项代码运行结果为`[5, 4, 3, 2, 1]`正确。
4. C
- 解析:如果`a>b`,则交换`a`和`b`的值,所以结果为`70 80`。
5. C
- 解析:元组中的元素不能被修改,选项 C 正确。A 选项并非所有对列表进行的操作都可以对元组进行,元组是不可变的;B 选项创建元组时,若元组中仅包含一个元素,在这个元素后必须添加逗号;D 选项多个元组可以进行连接。
6. B
- 解析:`tuple2 = (2)`创建的不是元组,而是整数 2,是对元组进行复制,所以选B。
7. D
- 解析:两层循环遍历“想念”和“家人”,将两个字符组合添加到列表中,结果为`["想家", "想人", "念家", "念人"]`。
8. A
- 解析:`ls = lt`使得`ls`和`lt`指向同一个列表,`ls.clear()`清空了这个列表,所以`lt`也为空,结果为`[]`。
9. B
- 解析:列表相加是将两个列表的元素合并在一起,结果为`[1, 2, 3, 4, 5, 6]`。
10. D
- 解析:str[0:4:2]表示从索引 0 开始到索引 3(不包括索引 4),步长为 2 进行切片。对于字符串 “maixnm”,str[0:4]=maix,按照这个切片操作,会得到 “mi”。
11. A
- 解析:`cat.index('black')`返回'black'在列表中的索引,为 1。
12. B
- 解析:`print(len(name))`可以快速得到列表`name`的长度,即班级学生的总人数。选项 A,`sum(name)`用于对可迭代对象的数值求和;选项 C,`print(min(name))`返回列表中的最小值;选项 D,`print(max(name))`返回列表中的最大值。
13. B
- 解析:`money.count(1600)`可以快速得到列表`money`中值为 1600 的元素的个数,即小张爸爸得到 1600 元绩效的次数。选项 A,`money.index(1600)`返回列表中第一个值为 1600 的元素的索引;选项 C,`money.remove(1600)`移除列表中第一个值为 1600 的元素;选项 D,`money.insert(0,1600)`在列表的开头插入元素 1600。
14. B
- 解析:`name=('Jerry',)`创建了一个元组,数据类型是元组。
15. C
- 解析:`d1.update(d2)`将字典`d2`的键值对更新到字典`d1`中,结果为`{'学科':'数学','班级':'2班','最高分':100}`。
16. A
- 解析:遍历字典`d`的`values`,将值转换为整数并累加求和,选项 A 正确。选项 B,`sum((d.values()))`语法错误;选项 C,循环条件错误;选项 D,语法错误。
17. C
- 解析:计算 1*2*3*4*5*6*7*8*9,初始值`s`应为 1,循环范围应为`range(1,10)`,选项 C 正确。
18. D
- 解析:`b=d`使得`b`和`d`指向同一个字典,修改`b['2']=5`后,字典`d`中的值也改变,所以`d['2']+b['2'] = 5 + 5 = 10`。
19. A
- 解析:`print(dic_color['gold'])`可以输出键为'gold'的值,即'金色'。选项 B,`print(dic_color['金色'])`键错误;选项 C,`print(dic_color[2])`索引错误;选项 D,`print(dic_color.values[2])`语法错误。
20. B
- 解析: 初始化`a = 0`,`b = 5`,`Sum = 0`。 第一次循环,因`a > 0`不成立,执行`Sum += b`后`Sum = 5`,再`a += 1`。 第二次循环,`a > 0`成立,`Sum += a`后`Sum = 6`,`a += 1`,`b += 1`。 第三次循环,`a > 0`成立,`Sum += a`后`Sum = 9`,`a += 1`,`b += 1`。 答案是 B。
21. B
- 解析:字符串格式化正确的用法是`print('My name is %s and I am %d years old.'%('Kevin',10))`。选项 A 缺少括号;选项 C,`%c`用于格式化字符,错误;选项 D 语法错误。
22. A
- 解析:对于猜密码程序,通常设置一个计数器来记录剩余次数。初始时通常设为 3,每次猜错减 1,当计数器为 0 时停止猜测。
23. A
- 解析:首先,a = list(range(10))即a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。
执行a[:2]=[5]后,a = [5, 2, 3, 4, 5, 6, 7, 8, 9]。
执行a.pop(5)后,a = [5, 2, 3, 4, 5, 7, 8, 9]。
执行a.remove(5)后,a = [2, 3, 4, 5, 7, 8, 9]。
答案是 A。
24. C
- 解析:`in`是用于判断元素是否在序列中的运算符,不能用于表示分支结构。`if`、`else`、`elif`可以用于表示分支结构。
25. C
- 解析:循环遍历`range(1,10)`,当`i%2 == 0`时输出`i`,即输出偶数,结果为`2 4 6 8`。
二、判断题答案及解析
26. √
- 解析:`format(Money)`格式化浮点数保留两位小数,结果为“工资 8.67”。
27. ×
- 解析:在使用`format()`函数对字符串进行格式化时,参数索引从 0 开始。
28. ×
- 解析:`while`语句和`for`语句都可以用于已知次数和未知次数的循环,具体使用取决于实际情况。
29. √
- 解析:`t.index(2)`返回第一个值为 2 的元素的索引,结果为 1。
30. ×
- 解析:元组是不可变的,不能执行`s.remove(5)`操作。
31. √
- 解析:Python 语言用缩进来标识语句块,同一级语句块中的语句具有相同的缩进量。
32. ×
- 解析:`[3]`是一个列表,`[1,2,3]`也是一个列表,`[3] in [1,2,3]`的值为`False`。
33. ×
- 解析:`break`语句执行后,将跳出当前最内层的循环,不是跳出程序所有的循环。
34. √
- 解析:字典中的键和值必须用冒号隔开,同一个字典中的所有键都必须是唯一的。
35. ×
- 解析:`a=6`,`b=5`,因为`a>b`,所以输出`a`的值为 6。
三、编程题解析
36. 参考代码:
s = "to be or not to be that is a question"# 定义一个字符串,包含多个英文单词
words = s.split()# 使用 split 方法将字符串按空格分割成单词列表
word_count = {}# 创建一个空字典,用于存储单词及其出现次数
for word in words:# 遍历单词列表中的每个单词
if word in word_count:
# 如果单词已经在字典中,说明该单词已出现过
word_count[word] += 1
# 将该单词的出现次数加一
else:
word_count[word] = 1
# 如果单词不在字典中,将其添加到字典中,并初始化为出现次数为 1
print(word_count)# 打印出统计结果,即每个单词及其出现次数组成的字典
总结:这段 Python 代码的功能是统计给定字符串中每个单词出现的次数,并以字典的形式输出结果。首先将字符串分割成单词列表,然后通过遍历单词列表,利用字典的特性来统计每个单词的出现次数。如果单词已经在字典中,就增加其出现次数;如果单词不在字典中,就将其添加到字典中并初始化为出现次数为 1。
37. 参考代码:
n = int(input())
# 从用户输入获取一个大于 1 的自然数,并转换为整数类型赋值给变量 n
count = 0
# 初始化变换次数计数器为 0
while n!= 1:
# 当 n 不等于 1 时,持续进行循环
if n % 2 == 0:
# 如果 n 是偶数
n = n // 2
# 将 n 变为原数的一半(整数除法)
else:
# 如果 n 是奇数
n = n * 3 + 1
# 将 n 变为原数的 3 倍加 1
count += 1
# 每次循环,变换次数计数器加 1
print(count)
# 输出从输入的自然数变换到 1 所经过的变换次数
总结:这段 Python 代码的功能是根据给定的运算规则,对输入的大于 1 的自然数进行一系列变换操作,直到该数变为 1。在这个过程中,通过循环不断判断当前数是奇数还是偶数,并按照规则进行相应的变换,同时使用计数器记录变换的次数,最后输出变换次数。
学科网(北京)股份有限公司
$$