计算机等级考试Python语言程序设计备考•第二练
本文我将分享计算机等级考试Python语言程序设计备考的第2练,虽然昨天已经考完了。选取的真题和第1练真题都不来自Python123或者Python2ji,参考答案的权威性相对来说差一些,包括这道题的选择题有部分题目可能存在校对错误的情况。
目录
【基本说明】
【选择题讨论】
【代码题编写】
第1题 字符串格式化输出
第2题 进制转换(2转8/2转10)
第3题 文件读取和字符串分割
第4题 turtle(海龟)作图
第5题 jieba库+组合数据类型使用(字典,列表,排序算法(可选))
第6题 文件读写+组合数据类型使用(字典)
【第三方库知识补充】(AI问答)
1. 给我在这些方面列举一些常用的基础的Python第三方库名称
2. python按键检测第三方库有哪些,typing库的作用?
【基本说明】
原题目和源代码已经上传个人空间,本套试题0积分下载,如果发现代码错误或者有更好的实现方案欢迎交流。
部分选择题除了考察Python基础知识外,还可以给我们一些更深入的思考。
【选择题讨论】
首先是第32题,这道题我一开始选的是A,因为我以为基于元素的for循环和while循环加上if else双分支选择结构效果一致。后来加上代码实测,我考虑到基于元素的for循环、基于列表索引的for循环、基于if的while循环、基于if else的while循环四种情况,在后面通过图片和解释的形式一一说明。
图 1 Python基于元素遍历的for循环(半静态)
图 2 Python基于索引遍历的for循环(静态)
图 3 基于if分支的while循环(半静态)
图 4 基于if else双分支的while循环(动态)
看完这四张图,熟悉代码的读者应该可以猜到基于元素遍历的for循环的基本实现逻辑:内部存储一个索引,每次重复进入循环体索引+1,同时包含数组(列表)的动态长度检测机制。那么,这种循环是返回列表值的复制还是返回列表值的引用呢?
图 5 基于元素遍历的for循环实现原理;Python文件读写位置共享机制
显然,是新分配了一块内存拷贝了原来数组中的值,因此修改之后并不生效。这和按索引遍历的for循环存在明显的区别:(1)返回值还是引用;(2)是否包含数组(列表)长度的动态检测。
第二道是35题,其实没有正确答案,因为Python文件读写的读取头和写入头是共享位置的,这点和C++不同,C++专门配置了读取头和写入头并提供了获取和设置两个头位置的函数接口。而Python只有seek():读写头共用的设置位置函数,和tell():读写头共用的获取位置函数。具体代码实测验证见前面图5。
第三道是40题,个人查阅资料之后觉得应该是题目校对错误,可能要改成“错误的是:”。
【代码题编写】
第1题 字符串格式化输出
# question 1
a,x=input().split(',')
print(int(a)*x,a,int(a)*x)
第2题 进制转换(2转8/2转10)
# question 2
b=input().strip(' ')
# assuming integer only
c=0
for i in range(len(b)):c+=int(b[i])*pow(2,len(b)-i-1)store=[]
while c>0:c,m=divmod(c,8)store.append(str(m))print("转换成八进制数是:",''.join(store[::-1]))
第3题 文件读取和字符串分割
# question 3
with open("data.txt","r",encoding="utf-8") as f:content=f.readlines()for i in range(len(content)):# print(content[i].split(':')[-1].strip('\n').strip(' ').strip(','))content[i]=eval(content[i].replace(',','').split(':')[-1])print("总和是:{:.1f},平均值是:{:.2f}".format(float(sum(content)),float(sum(content)/len(content))))
第4题 turtle(海龟)作图
注意最后笔的位置;我的代码实现大部分参考了参考答案。
# question 4
# directly pass because of information loss
import turtle
r = 10
dr = 40
head = -90
for i in range (4):turtle.pendown()turtle.circle(r)r += drturtle.penup()turtle.seth(head)turtle.fd(dr)turtle.seth(0)
turtle.done()
第5题 jieba库+组合数据类型使用(字典,列表,排序算法(可选))
注意输入处理不包括中文标点符号,注意输出格式要求。
可行思路:实现中文标点排除,我使用的方法是获取第一个字符,ord()获取Unicode编码数值之后判断十六进制区间。
找寻并列举最多出现次数的中文词汇可以使用排序算法(代码简单),或者先第1次遍历寻找最大值,后第2次遍历收集最大值索引(时间复杂度更低)。
# question 5.1
import jieba
s="工业互联网 ”实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。"
i=0
while i<len(s):if ord(s[i])<0x4e00 or ord(s[i])>0x9fa5:s=s[:i]+s[i+1:]else:i+=1res=jieba.lcut(s)
output='/'.join(res)+'/'+'中文词语数是:{}'.format(len(res))
print(output)# question 5.2
d={}
for w in res:d[w]=d.get(w,0)+1for w,f in d.items():print(w,':',f)rec=list(d.items())
rec.sort(key=lambda x:x[1],reverse=True)
j=0
words=[]
while j < len(rec)-1:words.append(rec[j][0])if rec[j+1][1]<rec[j][1]:breakj+=1
words2=' '.join(words)
print("出现最多的词是({}):{}次".format(words2,rec[0][1]))
第6题 文件读写+组合数据类型使用(字典)
由于没有原数据文件,我只复制了题目示例里面的三个jpg的例子作为数据。
# question 6.1
with open("dir_100.txt","r",encoding="utf-8") as f:content=f.readlines()d={}
for i in range(len(content)):sls=content[i].split('_')[0].replace('[','').replace(']','')key=int(content[i].split('_')[1].split('.')[0])temp=sls.split('\'')temp2=[]for i in temp:i=i.strip(' ')if i=='' or i==',' or i=='0':continuetemp2.append(int(i))d[key]=temp2for k,v in d.items():print(k,':',v)# question 6.2
d2={}
for v in d.values():for number in v:d2[number]=d2.get(number,0)+1
for k2,v2 in d2.items():print(k2,':',v2)# question 6.3
people=len(list(d2.keys()))
count=sum([i for i in d2.values()])
print("实际参加测试的人数是:{}".format(people))
print("人均被测次数是:{:.1f}".format(count/people))
【第三方库知识补充】(AI问答)
更广泛的Python计算生态,只要求了解第三方库的名称,不限于以下领域:网络爬虫、数据分析、文本处理、数据可视化、用户图形界面、机器学习、Web开发、游戏开发等。
1. 给我在这些方面列举一些常用的基础的Python第三方库名称
好的!以下是在不同领域中常用的一些基础的Python第三方库名称:
### 网络爬虫
1. **Requests**:用于发送HTTP请求。
2. **BeautifulSoup**:用于解析HTML和XML文档。
3. **Scrapy**:一个强大的爬虫框架,用于提取网页数据。
4. **Selenium**:用于自动化Web浏览器操作,适合动态网页爬取。
### 数据分析
1. **Pandas**:用于数据处理和分析,提供DataFrame和Series等数据结构。
2. **NumPy**:用于数值计算,支持大规模数组和矩阵操作。
3. **SciPy**:用于科学计算,包括统计、优化、信号处理等功能。
4. **Statsmodels**:用于统计建模和数据分析。
### 文本处理
1. **NLTK**(Natural Language Toolkit):用于自然语言处理,包括分词、词性标注、情感分析等。
2. **spaCy**:一个现代的自然语言处理库,提供高效的文本处理功能。
3. **TextBlob**:一个简单易用的文本处理库,支持文本分析和情感分析。
4. **re**(正则表达式):虽然不是第三方库,但常用于文本匹配和提取。
### 数据可视化
1. **Matplotlib**:用于创建静态、动画和交互式可视化。
2. **Seaborn**:基于Matplotlib,提供更高级的接口和更美观的默认样式。
3. **Plotly**:用于创建交互式图表。
4. **Bokeh**:专注于大规模数据集的交互式可视化。
### 用户图形界面
1. **Tkinter**:Python内置的GUI库,用于创建简单的图形用户界面。
2. **PyQt**:用于创建复杂的桌面应用程序。
3. **Kivy**:用于创建多点触控应用程序。
4. **wxPython**:用于创建跨平台的桌面应用程序。
### 机器学习
1. **Scikit-learn**:用于机器学习,提供简单高效的工具进行数据挖掘和数据分析。
2. **TensorFlow**:用于高性能数值计算,广泛用于深度学习。
3. **PyTorch**:一个开源机器学习库,基于Torch,主要用于应用如计算机视觉和自然语言处理。
4. **Keras**:一个高层神经网络API,可以运行在TensorFlow、CNTK或Theano之上。
### Web开发
1. **Django**:一个高级的Web框架,鼓励快速开发和干净、实用的设计。
2. **Flask**:一个轻量级的Web框架,适合小型项目和微服务。
3. **FastAPI**:一个现代、快速(高性能)的Web框架,用于构建API,基于Python 3.6+类型提示。
4. **Tornado**:一个可扩展的非阻塞Web服务器和Web框架。
### 游戏开发
1. **Pygame**:用于创建游戏和多媒体应用程序。
2. **Panda3D**:一个开源的3D游戏引擎。
3. **Arcade**:一个简单易用的游戏开发库,适合初学者。
4. **Godot**(Python绑定):虽然Godot本身是用GDScript编写的,但它也支持Python。
这些库是Python计算生态中的常用工具,每个库都有其独特的优势和应用场景。希望这些信息对你有帮助!
2. python按键检测第三方库有哪些,typing库的作用?
### Python按键检测第三方库
以下是一些常用的Python按键检测第三方库:
- **keyboard**:功能强大,可轻松监听键盘事件,如按键按下和释放。安装命令为`pip install keyboard`。
- **pynput**:流行且功能丰富的库,支持按键信息分析、获取修饰键状态、检测热键组合等。安装命令为`pip install pynput`。
- **Pygame**:主要用于游戏开发,也提供按键检测功能。安装命令为`pip install pygame`。
### typing库的作用
`typing`库是Python的标准库之一,用于支持类型提示(Type Hints)。它允许开发者在代码中明确指定变量、函数参数和返回值的类型,从而提高代码的可读性和可维护性。