Python程序设计案例教程第2版第8章模块化编程_第1页
Python程序设计案例教程第2版第8章模块化编程_第2页
Python程序设计案例教程第2版第8章模块化编程_第3页
Python程序设计案例教程第2版第8章模块化编程_第4页
Python程序设计案例教程第2版第8章模块化编程_第5页
已阅读5页,还剩47页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSM框架应用于沈工高职考试系统的设计与实践第8章模块化编程模块8.12导入模块1模块的概念4__name__属性3模块搜索路径8.1.1模块的概念模块是一个包含变量、语句、函数或者类的程序文件,文件名称就是模块名加上.py。模块的主要作用:提高代码的可维护性提高代码的可重用性有利于避免命名冲突import语句18.1.2导入模块语法格式案例import模块名importtime导入时间模块import模块名,模块名importrandom,numpy支持一次导入多个模块,中间逗号间隔import模块名as别名importrandomasrd如果导入模块名称较长,可以通过as为模块起别名以简化代码书写过程导入完成后可以通过“.”使用模块中的函数或者类。例如:time.sleep(1)from语句28.1.2导入模块语法格式案例from模块名import函数/类/变量fromtimeimportsleep,time从time库导入sleep()和time()函数。from模块名import*fromtimeimport*,利用通配符“*”,导入模块中的全部内容。导入模块中的指定对象,可以直接使用,不再使用模块名称指明对象所属的模块。使用import语句导入模块,需要能查找到模块程序所在的位置,即模块的文件路径,这是调用或执行模块的关键。导入模块时,不能在import或from语句中指定模块文件的路径,只能使用Python设置的搜索路径。标准模块sys的path属性可以用来査看当前搜索路径设置。8.1.3模块搜索路径>>>importsys>>>sys.path['','C:\\Python\\Python312\\python312.zip','C:\\Python\\Python312\\DLLs','C:\\Python\\Python312\\Lib','C:\\Python\\Python312’,'C:\\Python\\Python312\\Lib\\site-packages']>>>importos>>>os.getcwd()'C:\\Users\\40933'通常,sys.path(搜索路径)由4部分设置组成:程序的当前目录(可用os模块中的getcwd()函数查看)。操作系统的环境变量PYTHONPATH中包含的目录(如果存在)。Python标准库目录。任何.pth文件包含的目录(如果存在)。8.1.3模块搜索路径在搜索路径中找到模块并成功导入后,Python还会完成下面的功能:必要时编译模块:编译模块找到模块文件后,Python会检查文件的时间戳,如果字节码文件比源代码文件旧,Python执行编译,生成最新的字节码文件。搜索路径中只有源代码文件,Python就会直接执行编译操作,生成字节码文件。执行模块执行模块字节码文件中的所有可执行语句。8.1.3模块搜索路径8.1.4__name__属性Python每个文件都可以作为一个模块,按照使用方式可以分为两类:num3=int(input("请输入一个三位数:"))

hundreds_place=int(num3//100%10)#百位

ten_place=int(num3/10%10)#十位

one_place=int(num3%10)#个位

ifhundreds_place**3+ten_place**3+one_place**3==num3:

print(f"{num3}是水仙花数")

else:

print(f"{num3}不是水仙花数")Examp01.pydefrectarea(a,b):#返回矩形面积

returna*b

defrectperi(a,b):#返回矩形周长

return(2*a+2*b)Examp02.py可以直接执行的被当作模块进行导入的8.1.4__name__属性为了控制Python模块中的某些代码在导入时不执行,作为独立模块运行时才执行,可以使用__name__属性来实现。__name__是python的内置属性,用于表示当前模块的名称。如果.py文件作为模块被调用,则__name__的属性值即为模块文件的主名。如果模块独立运行,则__name__属性值为__main__。8.1.4__name__属性1defrectarea(a,b):#返回矩形面积

2

returna*b

3

defrectperi(a,b):#返回矩形周长

4

return(2*a+2*b)

5

if__name__=='__main__’:

6

print("矩形的运算")

7

print(rectarea(3,4))

8

print(rectperi(3,4))Case8_1.py案例Example__name__值为__main__,执行6-8行代码,执行结果如下:矩形的运算1214独立运行代码8.1.4__name__属性1fromCase8_1import*

2

print(rectarea(3,4))

3print(rectperi(3,4))Case8_2.py案例Example__name__值为模块名称,不执行6-8行代码,执行结果如下:1214作为模块被调用包8.28.2包Python的程序构成1Python程序由包、模块、类和函数构成的。包:模块文件所在的目录模块:即.py文件,里面定义了一些函数和类包的外层目录必须在Python的搜索路径中包下面可以有子包,子包目录下包含文件__init__.py,表示这是一个包目录包的外层目录不需要__init__.py文件__init__.py可以为空,也可以有__all__列表指定包中可以导入的模块包的构成28.2包fromgeneral.toolimportnetwork或者importwork案例22:扑克牌发牌游戏8.3举个例子Forexample8.3案例22:扑克牌发牌游戏将52张牌(不包括大小王)发给4名牌手。设计3个类Card类(一张牌)、Hand类(一手牌13张)和Poker类(一副牌52张)。Poker类为Hand类的子类。1设计思路8.3案例22:扑克牌发牌游戏Card类2classCard:

#一张牌

#牌面数字1~13

ranks=['A',"2","3","4","5","6","7","8","9","10","J","Q","K"]

suits=["♥","♠","♣","♦"]#牌为黑桃、红桃、草花、方块

#初始化牌面数字、花色和正反面

def__init__(self,rank,suit,face_up=True):

self.rank=rank#指的是牌面数字1~13

self.suit=suit#suit指的是花色

#是否显示牌正面,True为正面,False为牌背面

self.is_face_up=face_up

#输出牌面数字和花色

def__str__(self):

ifself.is_face_up:

rep=self.suit+self.rank#+""+str(self.pic_order())

else:

rep="XX"

returnrep#获取牌序号defpic_order(self):#牌的顺序号

ifself.rank=="A":

face_num=1

elifself.rank=="J":

face_num=11

elifself.rank=="Q":

face_num=12

ifself.rank=="K":

face_num=13

else:

face_num=int(self.rank)

ifself.suit=="黑桃":

suit=1

elifself.suit=="红桃":

suit=2

elifself.suit=="草花":

suit=3

else:

suit=4

returnsuit*13+face_num8.3案例22:扑克牌发牌游戏Hand类2classHand():

#一手牌

def__init__(self):

self.cards=[]

def__str__(self):

ifself.cards:

rep=""

forcardinself.cards:

rep+=str(card)+"\t"

else:

rep="无牌"

returnrep

defclear(self):

#清空手里的牌

self.cards=[]

defadd(self,card)

:#增加牌

self.cards.append(card)

defgive(self,card,other_hand):

#把一张牌给其他牌手

self.cards.remove(card)

other_hand.add(card)8.3案例22:扑克牌发牌游戏Poker类2classPoker(Hand):

#一副牌

defpopulate(self):#生成存储了52张牌的一手牌

forsuitinCard.suits:

forrankinCard.ranks:

self.add(Card(rank,suit))

defshuffle(self):

#洗牌

random.shuffle(self.cards)

defdeal(self,hands,per_hand=13):#发牌,发给玩家,每个人默认13张

forroundsinrange(per_hand):

forhandinhands:

ifself.cards:

top_card=self.cards[0]

self.cards.remove(top_card)

hand.add(top_card)

else:

print("Can'tcontinuedeal.Outofcards!")8.3案例22:扑克牌发牌游戏Case8_3测试类2if__name__==‘__main__’:

#4名牌手

players=[Hand(),Hand(),Hand(),Hand()]

poker1=Poker()

poker1.populate()#生成一副牌

poker1.shuffle()#洗牌

poker1.deal(players,13)#发给每名牌手13张牌

#显示4名牌手的牌

n=1

forhandinplayers:

print('牌手',n,end=":")

print(hand)

n=n+1标准库和第三方库8.48.4.1标准库Python自带了很多实用的模块,称为标准库或者标准模块,可以直接使用import语句导入模块。库名库功能库名库功能calendar提供与日历相关的各种函数random提供随机数功能datetime提供与日期、时间相关的各种函数re提供了基于正则表达式的字符串匹配功能decimal提供定点和浮点运算函数sys提供有关Python运行环境的变量和函数json提供使用JSON序列化和反序列化对象shutil提供高级的文件、文件夹、压缩包处理功能logging提供配置日志信息的功能time提供与时间相关的各种函数math提供数学运算函数urllib提供请求URL连接的功能OS提供对文件和目录进行操作的功能第三方库的概念18.4.2第三方库随着Python的发展,更多领域功能强大的的应用以函数库形式被开发出来,并通过开源形式发布,这些函数库被称为第三方库。第三方库包括模块(Module)、类(Class)和程序包(Package)等元素。官网提供了第三方库索引功能,网址为/pypi使用pip管理第三方库28.4.2第三方库常用的pip命令:pip3–helppip3install库名pip3install库名==版本号pip3show库名pip3listpip3uninstall库名使用pip工具安装第三方库文件常用的第三方库38.4.2第三方库库名用途安装命令jieba中文分词pip3installjiebanumpy矩阵运算、矢量处理、线性代数、傅里叶变换等pip3installnumpymatplotlib2D&3D绘图库、数学运算、绘制图表pip3installmatplotlibPIL通用的图像处理库pip3installpillowrequests网页内容抓取pip3installrequestspyinstallerPython源文件打包pip3installpyinstallerWheelPython文件打包pip3installWheelBeautifulSoupHTML和XML解析pip3installbs4Scrapy网页爬虫框架pip3installscrapysklearn机器学习和数据挖掘pip3installsklearnFlask轻量级Web开发框架pip3installflask常用的第三方库38.4.2第三方库库名用途安装命令Django开源Web框架pip3installdjangoWeRoBot微信机器人开发框架pip3installwerobotscipy依赖于numpy库的科学计算库pip3installscipypandas数据分析库pip3installpandasPyQt5专业级GUI开发框架pip3installpyqt5PyOpenGL多平台OpenG开发接口pip3installpyopenglPyPDF2PDF文件内容提取及处理pip3installpypdf2Pygame多媒体开发和游戏软件开发pip3installpygame常用的第三方库38.4.2第三方库使用pip安装第三方库,需要注意以下几个问题:Python3.x下,常使用pip3命令,也可以使用pip

命令安装。库名是第三方库常用的名字,pip安装用的文件名和库名不一定完全相同,通常采用小写字符。安装过程应在命令行下进行,而不是在IDLE环境中。有些库会依赖其他函数库,pip会自动安装;有些库在下载后需要一个安装过程,pip也会自动执行。pyinstaller库8.58.5pyinstaller库Pyinstaller的安装1pyinstaller是一个第三方库,它能够通过对源文件打包,使得Python程序可以在没有安装Python的环境中运行,也可以作为一个独立文件方便传递和管理。pyinstaller的安装命令如下:pip3installpyinstaller8.5pyinstaller库pyinstaller打包文件2使用pyinstaller命令打包文件命令如下:d:\Chapter01>pyinstallerCase1_1.py生成两个文件夹:build文件夹用于存放pyinstaller的临时文件,可以安全删除。Case1_1存放最终的打包程序8.5pyinstaller库pyinstaller打包文件2如果在pyinstaller命令中使用参数-F,则可将源文件编译成一个独立的可执行文件,代码如下:d:\Chapter01>pyinstallerCase1_1.py-F注意事项文件路径中不能出现空格或英文句号(.)。如果存在,则需要修改源文件的名字。源文件必须是UTF-8编码。路径提示符是“d:\Chapter01”,生成打包文件的位置与“>”提示符前的路径是一致的。8.5pyinstaller库pyinstaller的参数3pyinstaller常用参数如下:案例23:扑克牌发牌游戏打包8.68.6案例23:扑克牌发牌游戏打包打包文件1进入到程序目录中,使用pyinstaller命令进行打包,命令如下:D:\Chapter08>pyinstallerCase8_3.py-F执行结果如下:8.6案例23:扑克牌发牌游戏打包执行程序2进入到启动命令行,进入dist目录,使用dir命令看到该目录只有一个Case8_3.exe文件,执行该文件,运行结果如下。模块6:wordcloud库8.72wordcloud库安装1wordcloud库基本介绍5wordcloud案例3wordcloud常规方法4配置对象参数wordcloud是优秀的词云展示第三方库8.7模块6wordcloud库wordcloud库基本介绍1词云以词语为基本单位,更加直观和艺术地展示文本wordcloud库的安装2方式1:(cmd命令行)pipinstallwordcloud8.7模块6wordcloud库方式2:通过PyCharm安装wordcloud库常规方法3wordcloud.WordCloud()代表一个文本对应的词云可以根据文本中词语出现的频率等参数绘制词云词云的绘制形状、尺寸和颜色都可以设定wordcloud库把词云当作一个WordCloud对象8.7模块6wordcloud库wordcloud库常规方法3w=wordcloud.WordCloud()方法描述w.generate(txt)向WordCloud对象w中加载文本txt>>>w.generate("PythonandWordCloud")w.to_file(filename)w.to_image()将词云输出为图像文件,.png或.jpg格式>>>w.to_file("outfile.png")生成图片8.7模块6wordcloud库wordcloud库常规方法3w=wordcloud.WordCloud()importwordcloudc=wordcloud.WordCloud()c.generate("wordcloudbyPython")c.to_file("pywordcloud.png")步骤1:配置对象参数步骤2:加载词云文本步骤3:输出词云文件8.7模块6wordcloud库wordcloud库常规方法38.7模块6wordcloud库wordcloud库常规方法3"wordcloudbyPython"文本词云①分隔:以空格分隔单词

②统计:单词出现次数并过滤③字体:根据统计配置字号④布局:颜色环境尺寸8.7模块6wordcloud库配置对象参数4w=wordcloud.WordCloud(<参数>)参数描述width指定词云对象生成图片的宽度,默认400像素>>>w=wordcloud.WordCloud(width=600)height指定词云对象生成图片的高度,默认200像素>>>w=wordcloud.WordCloud(height=400)

min_font_size指定词云中字体的最小字号,默认4号>>>w=wordcloud.WordCloud(min_font_size=10)max_font_size指定词云中字体的最大字号,根据高度自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论