全国计算机等级考试二级Python真题及解析(10)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国计算机等级考试二级Python真题及解析(10)
1. 数据库系统的核心是___________。
A数据库管理系统
B数据模型
C软件工具
D数据库
正确答案: A
2. 下列叙述中正确的是___________。
A线性表链式存储结构的存储空间可以是连续的,也可以是不连续的
B线性表链式存储结构与顺序存储结构的存储空间都是连续的
C线性表链式存储结构的存储空间必须是连续的
D线性表链式存储结构的存储空间一般要少于顺序存储结构
正确答案: A
3. 某二叉树共有12个结点,其中叶子结点只有1个。
则该二叉树的深度为(根结点在第1层)___________。
A8
B12
C6
D3
正确答案: B
4. 下列叙述正确的是___________。
A算法的时间复杂度与空间复杂度一定相关
B数据的逻辑结构与存储结构是一一对应的
C算法的时间复杂度是指执行算法所需要的计算工作量
D算法的效率只与问题的规模有关,而与数据的存储结构无关
5. 对长度为n的线性表作快速排序,在最坏情况下,比较次数为
___________。
A n(n-1)/2
B n(n-1)
C n-1
D n
正确答案: A
6. 在软件开发中,需求分析阶段产生的主要文档是___________。
A软件需求规格说明书
B软件集成测试计划
C软件详细设计说明书
D用户手册
正确答案: A
7. 下列选项中不属于结构化程序设计原则的是___________。
A逐步求精
B逐步求精
C模块化
D可封装
正确答案: D
8. 设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为
A学号,课号
B学号,成绩
C课号,成绩
D学号,姓名,成绩
9. 下面叙述错误的是
A程序调试通常也称为Debug
B对被调试的程序进行"错误定位"是程序调试的必要步骤
C软件测试应严格执行测试计划,排除测试的随意性
D软件测试的目的是发现错误并改正错误
正确答案: D
10. 软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。
下面属于应用软件的是
A编译程序
B操作系统
C教务管理系统
D汇编程序
正确答案: C
11. 以下选项不属于 Python 语言特点的是:
A支持中文
B平台无关
C语法简洁
D执行高效
正确答案: D
12. 如果 Python 程序执行时,产生了“unexpected indent”的错误,其原因是:
A代码中使用了错误的关键字
B代码中缺少“:”符号
C代码里的语句嵌套层次太多
D代码中出现了缩进不匹配的问题
13. 以下关于 Python 程序语法元素的描述,错误的选项是:
A段落格式有助于提高代码可读性和可维护性
B虽然 Python 支持中文变量名,但从兼容性角度考虑还是不要用中文名C true 并不是 Python 的保留字
D并不是所有的 if、while、def、class 语句后面都要用‘:’结尾
正确答案: D
14. s = " Python", 能够显示输出 Python 的选项是:
A print(s[0:-1])
B print(s[-1:0])
C print(s[:6])
D print(s[:])
正确答案: D
15. 15. 表达式 'y'<'x' == False 的结果是:
A True
B Error
C None
D False
正确答案: D
16. 以下表达式是十六进制整数的选项是:
A 0b16
B ‘0x61’
C 1010
D 0x3F
正确答案: D
17.字符串 s = "I love Python",以下程序的输出结果是:
s = "I love Python"
ls = s.split()
ls.reverse()
print(ls)
A 'Python', 'love', 'I'
B Python love I
C None
D ['Python', 'love', 'I']
正确答案: D
18. 以下程序的输出结果是:
s=''
ls = [1,2,3,4]
for l in ls:
s += str(l)
print(s)
A 1,2,3,4
B 4321
C 4,3,2,1
D 1234
正确答案: D
19. 以下关于程序控制结构描述错误的是:
A 单分支结构是用if保留字判断满足一个条件,就执行相应的处理代码
B二分支结构是用if-else根据条件的真假,执行两种处理代码
C多分支结构是用if-elif-else处理多种可能的情况
D在Python的程序流程图中可以用处理框表示计算的输出结果
正确答案: D
20.ls = [1,2,3,4,5,6], 以下关于循环结构的描述,错误的是:
A表达式 for i in range(len(ls)) 的循环次数跟 for i in ls 的循环次数是一样的
B表达式 for i in range(len(ls)) 的循环次数跟 for i in range(0,len(ls)) 的循环次数是一样的
C表达式 for i in range(len(ls)) 的循环次数跟 for i in range(1,len(ls)+1) 的循环次数是一样的
D表达式 for i in range(len(ls)) 跟 for i in ls 的循环中,i 的值是一样的
正确答案: D
21.以下程序的输出结果是:
j = ''
for i in "12345":
j += i + ','
print(j)
A 1,2,3,4,5
B 12345
C‘1,2,3,4,5,’
D 1,2,3,4,5,
正确答案: D
22.以下程序的输出结果是:
a = 30
b = 1
if a >=10:
a = 20
elif a>=20:
a = 30
elif a>=30:
b = a
else:
b = 0
print('a={}, b={}'.format(a,b))
A a=30, b=1
B a=30, b=30
C a=20, b=20
D a=20, b=1
正确答案: D
23.以下程序的输出结果是:
s=''
try:
for i in range(1, 10, 2):
s.append(i)
except:
print('error')
print(s)
A 1 3 5 7 9
B [1, 3, 5, 7, 9]
C, 4, 6, 8, 10
D error
正确答案: D
24. 以下关于 python 函数使用的描述,错误的是:
A函数定义是使用函数的第一步
B函数被调用后才能执行
C函数执行结束后,程序执行流程会自动返回到函数被调用的语句之后D Python 程序里一定要有一个主函数
正确答案: D
25. 以下关于函数参数和返回值的描述,正确的是:
A采用名称传参的时候,实参的顺序需要和形参的顺序一致
B可选参数传递指的是没有传入对应参数值的时候,就不使用该参数C函数能同时返回多个参数值,需要形成一个列表来返回
D Python支持按照位置传参也支持名称传参,但不支持地址传参
正确答案: D
26.
以下程序的输出结果是:
def calu(x = 3, y = 2, z = 10):
return(x ** y * z)
h = 2
w = 3
print(calu(h,w))
A90
B70
C60
D80
正确答案: D
27.
以下程序的输出结果是:
img1 = [12,34,56,78]
img2 = [1,2,3,4,5]
def displ():
print(img1)
def modi():
img1 = img2
modi()
displ()
A[1,2,3,4,5]
B([12, 34, 56, 78])
C( [1,2,3,4,5])
D[12, 34, 56, 78]
正确答案: D
28.以下关于组合数据类型的描述,错误的是:
A集合类型是一种具体的数据类型
B序列类似和映射类型都是一类数据类型的总称
C python 的集合类型跟数学中的集合概念一致,都是多个数据项的无序组合
D 字典类型的键可以用的数据类型包括字符串,元组,以及列表
正确答案: D
29. 以下关于字典类型的描述,正确的是:
A字典类型可迭代,即字典的值还可以是字典类型的对象
B表达式 for x in d: 中,假设d是字典,则x是字典中的键值对
C字典类型的键可以是列表和其他数据类型
D字典类型的值可以是任意数据类型的对象
正确答案: D
30.以下程序的输出结果是:
ls1 = [1,2,3,4,5]
ls2 = [3,4,5,6,7,8]
cha1 = []
for i in ls2:
if i not in ls1:
cha1.append(i)
print(cha1)
A(6, 7, 8)
B(1,2,6, 7, 8)
C[1,2,6,7,8]
D[6, 7, 8]
正确答案: D
31.
以下程序的输出结果是:
d = {"zhang":"China", "Jone":"America", "Natan":"Japan"} print(max(d),min(d))
A Japan America
B zhang:China Jone:America
C China America
D zhang Jone
正确答案: D
32.以下程序的输出结果是:
frame = [[1,2,3],[4,5,6],[7,8,9]]
rgb = frame[::-1]
print(rgb)
A[[1, 2, 3], [4, 5, 6]]
B[[7, 8, 9]]
C[[1,2,3],[4,5,6],[7,8,9]]
D[[7, 8, 9], [4, 5, 6], [1, 2, 3]]
正确答案: D
33.已知以下程序段,要想输出结果为 1,2,3,应该使用的表达式是:x = [1,2,3]
z = []
for y in x:
z.append(str(y))
A print(z)
B print(",".join(x))
C print(x)
D print(",".join(z))
正确答案: D
34.
以下程序输出到文件 text.csv 里的结果是:
fo = open("text.csv",'w')
x = [90,87,93]
fo. write(",".join(str(x)))
fo.close()
A[90,87,93]
B90,87,93
C,9,0,,, ,8,7,,, ,9,3,
D[,9,0,,, ,8,7,,, ,9,3,]
正确答案: D
35. 以下属于 Python 的 HTML 和 XML 第三方库的是:
A mayavi
B TVTK
C pygame
D Beautiful Soup
正确答案: D
36. 用于安装 Python 第三方库的工具是:
A jieba
B yum
C loso
D pip
正确答案: D
37. 用于将 Python 程序打包成可执行文件的工具是:
A Panda3D
B cocos2d
C pip
D PyInstaller
正确答案: D
38.
以下程序不可能的输出结果是:
from random import *
x = [30,45,50,90]
print(choice(x))
A30
B45
C90
D55
正确答案: D
39. 有一个文件记录了 1000 个人的高考成绩总分,每一行信息长度是 20 个字节,要想只读取最后 10 行的内容,不可能用到的函数是:
A seek()
B readline()
C open()
D read()
正确答案: D
40. 以下关于文件的描述错误的选项是:
A readlines() 函数读入文件内容后返回一个列表,元素划分依据是文本文件中的换行符
B read() 一次性读入文本文件的全部内容后,返回一个字符串
C readline() 函数读入文本文件的一行,返回一个字符串
D 二进制文件和文本文件都是可以用文本编辑器编辑的文件
正确答案: D
二、操作题
1.101
描述
参照代码模板完善代码,实现下述功能。
输入一个字符串,其中的字符由(英文)逗号隔开,编程将所有字符连成一个字符串,输出显示在屏幕上。
输入输出示例
答案:
ls= input("请输入一个字符串,由逗号隔开每个字符:").split(',')(1)
print(''.join(ls))(2)
要点:
1. 题目要求输入的字符用逗号隔开,所以,需要用到split(',')来从字符串里提取所输入的字符
2. 经过split()函数的字符串,返回的是列表
3. 字符串有个操作函数是 str.join(ls),可以把列表里的各个元素,用str的内容连接起来。
本题利用了空字符串‘’,来调用这个函数,因此,达到了所想要的效果:将带有逗号的字符串变换成了没有逗号的字符串。
4. 有一个不可忽视的地方是join()函数的括号里的参数是列表,如果忘了这一点,会犯错
5. 这个功能利用好了,可以拓展,解决其他的问题。
2.102
描述
参照代码模板完善代码,实现下述功能。
有一个列表 studs 如下:
studs= [{'sid':'103','Chinese': 90,'Math':95,'English':92},{'sid':'101','Chinese': 80,'Math':85,'English':82},{'sid':'102','Chinese': 70,'Math':75,'English':72}] 将列表 studs 的数据内容提取出来,放到一个字典 scores 里,在屏幕上按学号从小到大的顺序显示输出 scores 的内容。
内容示例如下:
101:[85, 82, 80]
102:[75, 72, 70]
103:[95, 92, 90]
输入输出示例
答案:
studs= [{'sid':'103','Chinese': 90,'Math':95,'English':92},{'sid':'101','Chinese': 80,'Math':85,'English':82},{'sid':'102','Chinese': 70,'Math':75,'English':72}]
scores = {}
for stud in studs:
sv = stud.items() (1)
v = []
for it in sv:
if it[0] =='sid':
k = it[1]
else:
v.append(it[1])
scores[k] = v(2)
# print(scores)
so = list(scores.items())(3)
so.sort(key = lambda x:x[0],reverse = False)
for l in so:
print('{}:{}'.format(l[0],l[1]))
要点:
1. 字典作为元素,定义在列表里,用列表的遍历就可以从中提取出来
2. 提取出来的元素直接就是字典,因此可以用 items()直接获取,形成键值对对象集合 sv;
3. 对键值对对象集合sv遍历,就可以以元组it的方式访问其中的每一对键值对,sv = stud.items(),是第一个空的答案;
4. 题目要求提取学生的学号,所以需要比较键it[0]是否是'sid',是则将学号it[1]提取出来作为新的字典scores的键k;不是则将成绩提取出来作为新字典scores的值v;
5. 由于课程是多门,因此新字典scores的值v需要以列表的方式,保存各门课程的成绩,所以在不是的情况下,新字典scores的值v是利用append
(it[1])的方式,追加到列表的后面;
6. 对v做append操作,必须要事先定义v是一个空列表;因此需要在对每一条旧字典stud的键值对信息做处理的for it in sv:语句之前,用v = []初始化v 为一个空列表;
7. 经过对一条字典stud的处理,就形成一对k和v,所以接下来是给新字典scores添加一条键值对,scores[k] = v,是第二个空的答案
8. 经过对全部的studs列表里的各条字典处理完之后,新的scores字典就全部生成。
9. 题目要求按学号从小到大的顺序输出学号和成绩,所以需要对字典的键值对内容items()提取到列表so里,此处是第三个空的答案:so
= list(scores.items())
10. 用Lambda函数进行排序。
这个不在考试范围里,所以代码模板直接给出语句;
11. 对排好序的列表输出每组列表,这个直接给出语句,不再赘述。
3.103
描述
参照代码模板完善代码,实现下述功能。
从键盘输入一个用于填充的图符,一个字符串,一个要显示的字符串的总长度;编程将输入的字符串,居中输出显示在屏幕上,用填充图符补齐到输入的总长度。
如果总长度处输入的不是正整数,则提示请输入一个正整数,并重新提示输入,直至输入正整数。
输入:
请输入填充符号:@
请输入要显示的字符串:qq
请输入字符串总长度:r
请输入一个正整数
请输入字符串总长度:3.4
请输入一个正整数
请输入字符串总长度:4
输出:
@qq@
输入输出示例
答案:
#请在____处填写一行代码#请在… 处填写多行代码#不要修改已给出代码a = input() # 请输入填充符号
c = input() # 请输入要显示的字符串
flag = 1 (1)
while flag:
try:
b = eval(input()) # 请输入字符串总长度
except:
flag = 1
print("请输入一个正整数")
else:
if type(b)== int (2)and b>0:
flag = 0
else:
flag = 1
print("请输入一个正整数")
print('{0:{1}^{2}}'(3).format(c,a,b))
4.201
描述
参照代码模板完善代码,实现下述功能,不得修改其它代码。
使用 turtle 库的 turtle.fd() 函数和 turtle.seth() 函数绘制螺旋状的正方形,正方形边长从 1 像素开始,第一条边从 0 度方向开始,效果如下图所示。
---------------------------------------------------------------
自动评阅说明
使用字符串形式输出 ____①____,____②____,____③____中应填代码即可以自动评阅得分
例如,如果代码为:
# 代码模板 | # 你的代码import turtle | import turtle
d = 0 | d = 0for i in range(__1__): | for i in range(1):
turtle.fd(__2__) | turtle.fd(100)
d = __3__ | d = (i + 100) * 100
turtle.seth(d) | turtle.seth(d)
则在提交代码页面输入:
print('1', '100', '(i + 100) * 100')
提交后即可以查看得分
注:如果有运算符,请在运算符两侧加上空格
习题讲解
答案:
import turtle
d = 0
k = 1
for j in range(10):
for i in range(4):
turtle.fd(k(1))
d += 91
turtle.seth(d(2))
k += 2_(3)
turtle.done()
要点:
1. 降低了难度,让填写的都是最简单的
5.202
描述
参照代码模板完善代码,实现下述功能,可以修改其它代码。
附件文件question.txt 中有一道 Python 选择题,第 1 行的第 1 个数据为题号,后续的 4 行是 4 个选项。
示例内容如下:
3. 以下关于字典类型的描述,错误的是:
A. 字典类型中的数据可以进行分片和合并操作
B. 字典类型是一种无序的对象集合,通过键来存取
C. 字典类型可以在原来的变量上增加或缩短
D. 字典类型可以包含列表和其他数据类型,支持嵌套的字典
读取其中的内容,提取题干和四个选项的内容,利用 jieba 分词并统计出现频率最高的 3 个词,其中要删除以下的常用字和符号“的,::可以是和中以下B”,作为该题目的主题标签,显示输出在屏幕上。
输入输出示例
答案:
import jieba
fi = open("question.txt",'r')
con = ''
num = 0for l in fi:
l=l.replace('\n','').strip().split('.')
# print(l)
try:
ft = eval(l[0])
except:
pass
else:
num = ft
con += l[1]print('第{}题的主题是:'.format(num)) conls = jieba.lcut(con)dict = {}for word in conls:
dict[word] = dict.get(word, 0) + 1
dictls = list(dict.items())
dictls.sort(key = lambda x:x[1], reverse = True)
k = 0for it in dictls:
if it[0] in '的,::可以是和中以下B':
continue
else:
if k == 3:
break
else:
print('{}:{}'.format(it[0],it[1]))
k += 1
fi.close()
要点:
1. 导入jieba库,使用lcut分词,返回列表conls
2. 打开文件,读文件,关闭文件
3. 按行从文件里读,每一行是一个字符串,用strip和split处理成列表,因
为要识别题号,还要提取题目和选项的内容,所以要按照'.'分隔来提取,分别
返回题号和选项号作为列表l的第0个字段,后面的内容是列表l的第一个字段;
4. 为了识别题号,要利用eval,并逆向利用try-except结构捕捉第一个字段
是整数的字段,把题号提取出来放到num里面,把其他的内容都用字符串加法,拼成一个大字符串con
5. 给出第一句显示:print('第{}题的主题是:'.format(num))
6. 接下来处理con,提取整个题干的主题词:
7. 用jieba分词,然后用字典dict来保存没个词出现的次数。
一种惯用法是for word in conls:
dict[word] = dict.get(word, 0) + 1
8.统计出来的词以及词频,需要排序找到最大三个词频,此时需要把字典
的键值对items()提取出来形成列表dictls,并利用列表排序和lambda函数。
得到排好序的dictls
9.显示的时候,遍历字典的每个键,要避开那些没有意义的词,题目里给
出了剔除列表,拿过来判断一下,如果是没用的词,就直接跳过,循环下一个,用continue;
10. 如果是有意义的词,题目要求显示三个最高词频的词,因为中间有跳过的词,不能直接只循环排序靠前的3个词。
要对显示了的词做计数,计够三个,就中断循环,所以要用break;
11. 这里用了嵌套的分支结构,在第一个分支里是有意义的词,在第二个分支里是计数不到三个,才做显示输出的语句,显示完了,要把计数器k加一。
12.程序最后记着关闭文件。
6.301
描述
老王的血压有些高,医生让家属给老王测血压。
老王的女儿记录了一段时
间的血压测量值,在文件 xueyajilu.txt 中,内容示例如下:
2018/7/2 6:00,140,82,136,90,69
2018/7/2 15:28,154,88,155,85,63
2018/7/3 6:30,131,82,139,74,61
2018/7/3 16:49,145,84,139,85,73
2018/7/4 5:03,152,87,131,85,63
文件内各部分含义如下:
测量时间,左臂高压,左臂低压,右臂高压,右臂低压,心率
参照代码模板完善代码,实现下述功能,可以修改给定代码。
(1)使用字典和列表类型进行数据分析,获取老王的
左臂和右臂的血压平均值
左臂和右臂的高压最高值、低压最高值
左臂和右臂的高/低压差平均值
心率的平均值
给出左臂和右臂血压情况的对比表,输出到屏幕上,请注意每行三列对齐。
示例如下:
(2)上述显示的五个项目,如果左臂有大于 50% 的项目高于右臂,则输
出“结论:左臂血压偏高”;如果等于 50% 的项目高于右臂,则输出“结论:左
臂血压与右臂血压相当”;如果小于 50% 的项目高于右臂,则输出“结论:右臂血压偏高”。
示例如下:
结论:左臂血压偏高, 心率的平均值为66
(注意:此处为格式示例,实际数据与此不同)
输入输出示例
结论:左臂血压偏高, 心率的平均值为66
答案:
fi = open("xueyajilu.txt",'r')
jl = [[],[],[],[],[]] # 1:zb_h, zb_l,yb_h,yb_l
zyc = []
yyc = []
xl = []for l in fi:
lls=l.replace('\n','').strip().split(',')
for i in range(1,5):
jl[i].append(eval(lls[i]))
zyc.append(eval(lls[1])-eval(lls[2]))
yyc.append(eval(lls[3])-eval(lls[4]))
xl.append(eval(lls[5]))
fi.close()
cnt = len(xl)
res = []
res.append(list(("高压最大值",max(jl[1]),max(jl[3]))))
res.append(list(("低压最大值",max(jl[2]),max(jl[4]))))
res.append(list(("压差平均值",sum(zyc)//cnt,sum(yyc)//cnt)))
res.append(list(("高压平均值",sum(jl[1])//cnt,sum(jl[3])//cnt)))
res.append(list(("低压平均值",sum(jl[2])//cnt,sum(jl[4])//cnt)))
res.append(list(("心率平均值",sum(xl)//cnt,0)))
zbg = 0
ybg = 0print('{:<10}{:<10}{:<10}'.format("对比项", "左臂", "右臂"))for r in range(len(res)-1):
print('{:<10}{:<10}{:<10}'.format(res[r][0],res[r][1],res[r][2]))
if res[r][1]> res[r][2]:
zbg += 1
else:
ybg += 1
if zbg > ybg:
print('结论:左臂血压偏高',end ='')elif zbg == ybg:
print('结论:左臂血压与右臂血压相当',end ='')else:
print('结论:右臂血压偏高',end ='')print(', 心率的平均值为
{}'.format(res[5][1]))
输出结果:
对比项左臂右臂
高压最大值 163 155
低压最大值 93 90
压差平均值 61 57
高压平均值 146 140
低压平均值 85 82
结论:左臂血压偏高, 心率的平均值为66
要点:
1. 这道题的关键问题是解决对行数据按照列的方式来处理
2.参考答案给出的是一般思路,把文件里读出来的数据分别按列的方式,拷贝到一维列表中去,对一维列表进行各种max,min,sum,len操作
4.数据处理的逻辑并不复杂,这里不赘述。
5.其次要解决的问题,是当列数有些多的时候,程序看起来很冗余,需要做一些优化合并;
6.答案里给出的方案是前四个计算公式类似的,放到一个二维列表里,加个循环结构,就可以把四条语句缩成一条。
7.第三个问题,显示输出要求像表格一样输出,又要比较高效率,就引入了一个二维列表,把要输出的行头和内容,变成列表,再加到二维列表中去
8.最后的显示就变得很容易,一个循环就搞定了。
9.最后的问题,是要对输出的二维表格数据作统计、比对、下结论。
比较好的方法是输出的时候,顺便做计数;
10. 显示输出结论的时候,遇到一个小问题,要在做比对后的不同的结论后面,追加一条相同的心率的平均值,还不能换行;解决的方法就是用end='',然后在最后加一句print心率的结果。
11. 当然可以在每条结论的后面,都重复的写一句心率的结果,虽然最后的结果是一样的,但代码有冗余。
如果把咱们写程序,比喻成女娲造人,冗余的程序就像胖子,而高效简洁的程序就像美女,咱们还是要追求造出美女,而不是胖子。