还剩36页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序设计?习题与参考答案Python第章根底知识
11.1简单说明如何选择正确的Python版本答在选择Python的时候,一定要先考虑清楚自己学习Python的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的Python,是Python
2.x还是Python
3.x,最高支持到还是Python这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间艰费在Python的反复安装和卸载上同时还应垓注意,当更新的Python版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进展更新尽管如此,Python3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一抻新的、好玩的诏言,那么情毫不犹喋地选择Python
3.x系列的最高版本〔目前是Python
3.
4.3]
1.2为什么说Python采用的是基于值的内存管理模式答Python采用的是基于值的内存管理方式,如果为不同变量赋值一样值,那么在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码»x=3»idx10417624»y=3»idy10417624»y=5»idy10417600»idx
104176241.3在Python中导入模块中的对象有哪几种方式答常用的有三种方式,分别为•import模块名[as■名]else:x=x[:result.start0]+i+x[result.end0-1:]else:breakprintx
4.3有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保存一个例如文本内容为“This isis a desk,程序输出为“This isadesk.答:这里给出Python342代码,如果使用Python278的话只需要修改其中的print函数为print语句即可1]方法一import rex=This isa adesk.1pattern=re.piler\b\w+\s+\1{1,}\bmatchResult=pattern.searchxx=pattern.submatchResult.group1,x printx2〕方法二x=This isa adesk.pattern=re.piler,Pf\b\w+\b\sP=f1matchResult=pattern.searchxx=x.replacematchResult.group0,matchResult.group
14.4简单解释Python的字符串驻留机制答Python支持字符串驻留机制,即对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本这一点不适用于长字符串,即长字符串不遵守驻留机制,下面的代码演示了短字符串和长字符串在这方面的区别»a=1234»b=1234»ida==idbTrue»a=1234*50»b=12341*50»ida==idbFalse
4.5编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词答这里给出代码,如果使用的话只需要修改其中的print函数为print话句即可import rex=inputPlease inputa string:pattern=re.p iI er\b[a-zA-Z]{3}\b1printpattern.findallx第章函数段计与使用
55.1运行531小节最后的例如代码,查看结果并分析原因答原因是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次的结果,对于列表这样的构造,如果调用函数时为默认值参数的列表插入或删除了元素,符会得到保存,从而嶷响下一次调用
5.2编写函数,判断一个整数是否为素数,并编写主程序调用该函数答:这里给出代码,如果使用的话只需要修改其中的print函数为print语句即可import mathdefIsPrimev:n=intmath.sqrtv+1for i in range2,n:if v%i==0:return Noelse:return YesprintlsPrime37printlsPrime60printlsPrime
1135.3编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果答这里给出Python3,
4.2代码,如果使用的话只需要修改其中的print函数为print话句即可def demov:capital=little=digit=other=0for i in v:if A=i=Z:capital+=1elif,al=i=,z:little+=1elif,0=i=9:digit+=1else:other+=1return capital,little,digit,otherx=capital=little=digit=other=0printdemox
5.4在Python程序中,局部变量会隐藏同名的全局变量吗?请编写代码进展验证答案会»def demo:a=3print a»a=5»demo3»a
55.5编写团数,可以接收任意多个整数并输出其中的最大值和所有整数之和咨这里给出代码,如果使用的话只需要修改其中的print函数为print话句即可def demo*v:printvprintmaxvprintsumvdemo1,2,3demo1,2,3,4demo1,2,3,4,
55.6编写函数,模拟内置函数sumo答这里给出代%如果使用的话只需要修改其中的print函数为print语句即njodef Sumv:s=0for i in v:s+=i returnsx=[1,2,3,4,5]printSumxx=123,4,5printSumx
5.7编写函数,模拟内置函数sorted0咨这里给出代码,如果使用的话只需要修改其中的print函数为print话句即可def Sortedv:t=v[::]r=[]while t:tt=mintr.appendttt.removettreturn rx=[1,3,5,2,1,0,97]printxprintSortedx第章面向对象程序设计
66.1继承
6.5节例2中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息答代码为import typesclassPersonobject:#基类必须继承于object,否那么在派生类中将无法使用super函数def_init_self,name=,age=20,sex=man:self.setNamenameself.setAgeageself.setSexsexdef setNameself,name:if notisinstancename,str:printname mustbe string.returnself.—name=namedef setAgeself,age:if notisinstanceagejnt:printcage mustbe integer.1returnself.—age=agedef setSexself,sex:if sex!=man andsex!=woman:printsex mustbe manor womanreturnself.—sex=sexdef showself:printself._nameprintself._ageprintself._sexclass StudentPerson:def_init_self,name=,age=30,sex=man,major=puter:#调用基类构造方法初始化基类的私有数据成员superStudent,self._init_name,age,sexself.setMajormajor#初始化派生类的数据成员def setMajorself,major:if notisinstancemajor,str:printmajor mustbe astring.returnself.—major=majordef showself:superStudent,self.showprintself.—majorif_name_==_main_:zhangsan=PersonZhang San,19,man zhangsan.showlisi=StudentCLi Si,32,man,Mathlisi.show
6.2设it—个三维向量类,并实现向量的加法、减法以反向量与标量的乘法和除法运算答代码如下class Vecter3:def_init_self,x=0,y=0,z=0:self.X=xself.Y=yself.Z=zdef_add_self,n:r=Vecter3r.X=self.X+n.Xr.Y=self.Y+n.Yr.Z=self.Z+n.Z returnrdef_sub_self,n:r=Vecter3r.X=self.X-n.Xr.Y=self.Y-n.Yr.Z=self.Z-n.Z returnrdef_mul_self,n:r=Vecter3r.X=self.X*nr.Y=self.Y*nr.Z=self,Z*nreturn rdef_truediv_self,n:r=Vecter3r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturn rdef_floordiv_self,n:r=Vecter3r.X=self.X//nr.Y=self.Y//nr.Z=self.Z//nreturn rdefshowself:printself.X,self.Y,self.Zv1=Vecter31,2,3v2=Vecter34,5,6v3=v1+v2v
3.showv4=v1-v2v
4.showv5=v1*3v
5.showv6=v1/2v
6.show
6.3面向对象程序设计的三要素分别为封装、继承和多态
6.4简单解释Python中以下划线开头的变量名特点答在Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中用下划线作为变量前缀和后缀来表示类的特殊成员•_xxx这样的对象叫做保护变量,不能用from moduleimport*,导入,只有类对象和子类对象能访问这些变量;•-XXX-系统定义的特殊成员名字;•-XXX:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名一类名—XXX”这样的特姝方式来访问python中没有纯粹的C++意义上的私有成员
6.5与运算符“**”对应的特殊方法名为_pow—,与运算符力对应的特殊方法名为_floordiv_o第章文件操作
77.1假设有一个英文文本文件,编写程序读取其内容,并招其中的大写字母变为小写字母,小写字母变为大写字母答f=openrd:\
1.txt/r s=f.readlines f.closer=[i.swapcaseO for iins]f=openr,d:\
2.txt,,w,f.writelinesr f.close
7.2编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示答Python
3.
4.2代码import pickled={X三98;李四’:90:王五FOO}printdf=openCscore.dat,wb pickle.dump1,f pickle.dumpd,f f.closef=openCscore.dat,Tb pickle.loadf d=pickle.loadf f.close printd
7.3使用shutil模块中的move方沫进展文件移动答»import shutil»shutil.moverd:\
1.txt,re:\
1.txt e:\\
1.txt,
7.4简单解释文本文件与二进制文件的区刖答:⑴文本文件文本文件存储的是常规字符串,由假设干文本行组成,通常每行以换行符’\结尾常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字、数字字符串文本文件可以使用字处理软件如gedit、记事本进展编辑〔2〕二进制文件二进制文件把对象内容以字节串bytes进展存储,无法用记事本或其他普通字处理软件直接进展编辑,通常也无法被人类直接阅读和理解,需要使用专门的我件进展解码后读取、显示、修改或执行常见的如图形图像文件、音视频文件、可执行文件、资源文件、各种数据库文件、各类ffice文档等都属于二进制文件
7.5编写代码,将当前工作目录修改为“c:\,并验证,最后人当前工作目录恢复为原来的目录答»import os»os.getcwdO,C:\\Python34,»os.chdirrc:W»os.getcwdOc:\\»os.chdirrc:\Python34»os.getcwdOc:\\Python
347.6编写程序,用户输入一个目录和一个文件各,搜索谖目录及其子目录中是否存在该文件答1〕Python
3.
4.2代码import sysimport osdirectory=sys.argv
[1]filename=sys.argv
[2]paths=os.walkdirectoryfor root,dirs,files inpaths:if filenamein files:printCYes•from模块名import对象名[as别名]•from mathimport*
1.4使用pip命令安装numpy.scipy模块答在命令提示符环境下执行下面的命令pip installnumpypip installscipy
1.5编写程序,用户输入一个三位以上的整数,输出其百位以上的数字例如用户输入1234,那么程序输出12〔提示使用整除运算〕答1〕Python
3.
4.2代码x=inputPlease input an integer of more than3digits:try:x=intxx=x//100if x==0:printCYou must input an integerof morethan3digits.else:printxexcept BaseException:printCYou must inputan integer.2〕Python
2.
7.8代码import typesx=inputPlease inputan integerof morethan3digits:if typex!=types.lntType:print Youmustinputan integer.elif lenstrx!=4:print Youmustinputan integerofmorethan3digits.else:print x//100第章数据构造2Python
2.1为什么应尽量从列表的尾部进展元素的增加与删除操作答:break else:printCNo2〕Python
2.
7.8代码import sysimport osdirectory=sys.argv
[1]filename=sys.argv
[2]paths=os.walkdirectory forroot,dirs,files inpaths:if filenamein files:print Yesbreakelse:print No第章异常处理构造与程序调试
88.1Python异常处理构造有哪几种形式答比拟常用的形式有:1]标选异常处理构造try:try块#被监控的话何,可能会引发异常]except Exception!,reason:except块#处理异常的代码如果需要捕获所有异常时,可以使用BaseException,代码格式如下:try:except BaseException,e:except块#处理所有错误上面的构造可以捕获所有异常,尽管这样做很平安,但是一般并不建我这样做对于异常处理构造,一般的建议是尽量显式捕捉可能会出现的异常并且有针对性地编写代码进展处理,因为在实标应用开发中,很难使用同一段代码去处理所有类型的异常当然,为了防止遗漏没有得到处理的异常干扰程序的正常执行,在捕捉了所有可能想到的异常之后,您也可以使用异常处理构造的最后一个except来捕捉BaseException
8.2]另外一种常用的异常处理构造是try...except...else…语句3〕在实际开发中,同一段代码可能会抛出多个异常,需要针对不同的异常类型进展相应的处理为了支持多个异常的捕捉和处理,Python提供了带有多个except的异常处理构造,这类似于多分支选择构造,一旦某个except捕获了异常,那么后面剌余的except子句将不会再执行语法为try:try块#被监控的话句except Exceptionl:except块1#处理异常1的语句except Exception:except块2#处理异常2的语句4〕将要捕获的异常写在一个元组中,可以使用一个except话句捕获多个异常,并且共用同一段异常处理代码,当然,除非确定要捕获的多个异常可以使用同一段代码来处理,并不建议这样做5〕最后一种常用的异常处理构造是ty..except…finally…构造在该构造中,finally子句中的内存无论是否发生异常都会执行,常用来做一些清理工作以释放try子句中申请的资源话法如下try:finally:……#无论如何都会执行的代码
8.3异常和错误有什么区别?答异常是指因为程序执行过程中出错而在正常控制流以外采取的行为严格来说,培法错误和退辑错误不属于异常,但有些话法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等
8.4使用pdb模块进展Python程序调试主要有唧几种用法?答主要有三种方式,1〕在交互模式下使用Pdb模块提供的训能可以直接调试语句块、表达式、函数等多种脚本2]在程序中嵌入断点来实现调试功能在程序中首先导入Pdb模块,然后使用pdb.set_trace在需要的位置设置断点如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行垓程序或双击执行程序时招自动翻开Pdb调试环境,即使该程序当前不处于调试状态3]使用命令行调试程序在命令行提示符下执行“python—m pdb脚本文件名“,那么直接进入调试环境;当调试完毕或程序正常完毕以后,Pdb将重启该程序
8.5Python内建异常类的基类是BaseException
8.6断言话句的培法为assert
8.7Python上下文管理语句是w曲第章编程9GUI
9.1设计一个窗体,并放置一个按钮,单击技钮后弹出前色对话框,关闭颜色对话框后提示选中的面色答代码如下,import wxclasswxGUIwx.App:def Onlnitself:frame=wx.Frameparent=None,title=wxGlir,size=160,140panel=wx.Panelframe,-1buttonOK=wx.Buttonpanel,-1,OK,pos=0,0self.Bindwx.EVT_BUTTON,self.OnButtonOK,buttonOKframe.Showreturn TruedefOnButtonOKself,event:colorDIg=wx.ColourDialogNonecolorDlg.ShowModalcolor=colorDIg.GetColourData.Colourwx.MessageBoxstrcolorapp=wxGUIapp.MainLoopO
9.2设计一个窗体,并放置一个按钮,按钮默认文本为“开场”,单击按钮后文本变为“完毕,再次单击后变为“开场,循环切换笞代码如下,import wxclasswxGUIwx.App:def Onlnitself:frame=wx.Frameparent=None,title=wxGUr,size=160,140panel=wx.Panelframe,-1self.buttonOK=wx.Buttonpanel,-1,Start,pos=0,0self.Bindwx.EVT_BUTTON,self.OnButtonOK,self.buttonOKframe.Showreturn TruedefOnButtonOKself,event:text=self.buttonOK.GetLabelTextif text==Start:self.buttonOK.SetLabelTextEndelif text==End:self.buttonOK.SetLabelTextStartapp=wxGUI app.MainLoopO
9.3设计一个窗体,模拟QQ登录界面,当用户输入123456和密码654321时提示正确,否那么提示错误笞代码如下,import wxclasswxGUIwx.App:def Onlnitself:frame=wx.Frameparent=None,title=Login,size=250,150,pos=350,350panel=wx.Panelframe,-1labell=wx.StaticTextpanel,-1,UserName:,pos=0,10,sty le=wx.AL IGN_R IGHTIabel2=wx.StaticTextpanel,-1,Password:,pos=0,30,style=wx.ALIGN_RIGHTself.textName=wx.TextCtrlpanel,-1,pos=70,10,size=160,20self.textPwd=wx.TextCtrlpanel,-1,pos=70,30,size=160,20,style=wx.TE_PASSWORDbuttonOK=wx.Buttonpanel,-1,1OK1,pos=30,60self.Bindwx.EVT_BUTTON,self.OnButtonOK,buttonOKbuttonCancel=wx.Buttonpanel,-1,Cancel,pos=120,60self.Bindwx.EVT_BUTTON,self.OnButtonCancel,buttonCancel buttonOK.SetDefaultframe.Showreturn TruedefOnButtonOKself,event:if usrName==,123456and usrPwd==654321,:wx.MessageBoxCRight1else:wx.MessageBoxCWrongdef OnButtonCancelself,event:passapp=wxGUI app.MainLoopO第章网络程序设计
1010.1简单解释TCP和UDP梆议的区别答TCP胡议是面向连接的、具有质量保证的可靠传输机议,但开销较大;UDP梆议是尽最大能力传输的无连接机议,开销小,常用于视频在线点播〔VideoOnDemand,VOD〕之类的应用TCP梆议和UDP佛议并没有优劣之分,仅仅是适用场合有所不同
10.2同学之间合作编写UDP通信程序,分刖编写发送端和接收端代码,发送端发送一个字符串“Hello world!假设接收端在计算机的5000喘口进展接收,并显示接收内容答首先使用ipconfig/all命令查看本机IP地址,然后分别编写下面的代码,并将其中的IP地址替换为相应的IP地址接收端代码import sockets=socket.socketsocket.AF_INET,socket.SOCK_DGRAMs.bind,5000#空字符串表示本机任何可用IP地址data,addr=s.recvfrom1024#缓冲区大小为1024字节print1received message:%s,%data#显示接收到的内容s.close发送端代码import sockets=socket.socketsocket.AF_INET,socket.SOCK_DGRAM,s.sendtoCHello,world!”CIO.
20.
52.248”,5000#假设
10.
20.
52.248是接收端主机的IP地址s.close
10.3简单介绍socket模块中用于TCP编程的常用方法TCP一般用于要求可靠数据传输的场合编写TCP程序时经常需要用到的socket模块方法主要有•connectaddress连接远程计算机•sendbytes[,flags]发送数据•recvbufsize[,flags]接收数据•bindaddress绷定■址•listenbacklog开场监听,等待客户端连接•acceptO响应客户端的请求
10.4编写代码读取搜狐网页首页内容笞:»import urllib.request»dirurllib.request»fp=urllib.request.urlopen»dirfp»printfp.read1OO»fp.close
10.5在自己的机器上配置IIS以支持Python脚本的运行,然后使用Python编写脚本,运行后在网页上显示“Helloworld!”答核心代码为printprint Status:200OKprint Content-type:text/htmlprintprint HTMLHEADTITLEPythonSample CGI/TITLEx/HEAD,print BODYprintH1This isa header/H1print pHelloworld!print brprint/B0DY
11.1简单介绍常见的大数据处理框架答主要有三种,•MapReduce分布式计算框架,可以将单个大型计算作业分配给多台计算机执行,可以在短时间内完成大量工作,尤其适合数值型和标称型数据,但需要对行业领域具有一定理解后重写算沫来完成特定的业务处理要求MapReduce的名字由函数式编程中常用的map和reduce两个单词组成MapReduce在大量节点组成的集群上运行,工作流程是单个作业被分成很多小价,输入数据也被切片并分发到每个节点,每个节点只在本地数据上做运算,对应的运算代码称为mapper,这个过程即map阶段;每个mapper的输出通过某种方式组合,根据需要可能再进展重新排序,排序后的结果再被切分成水价并分发到各个节点进展下一步处理,这个过程被称为reduce阶段,对应的代码称为reducer不同类型的作业可能需要不同数量的reducer,并且,在任何时候,每个mapper或reducer之间都不进展通信,每个节点只负责处理自己的事务,并且只在分配到本地的数据集上进展运算•Hadoop Hadoop是MapReduce框架的一个免费开源集现,采用Java赭言编写,支持在大量机器上分布式处理数据除了分布式计算之外,Hadoop还自带分布式文件系统,可以在上面运行多种不同培言编写的分布式程序Hadoop在可伸缩性、强健性、计算性能和本钱上具有无可替代的优势,事实上已成为当前互联网企业主流的大数据分析平台•Spark Spark是一个针对超大数据集合的低延迟集群分布式计算系统,比MapReduce快40倍左右Spark是Hadoop的升级版本,兼容Hadoop的API,能够读写Hadoop的HDFSHBASE I项序文件等,与之不同的是H结果保存在内存中Hadoop作为第一代产品使用了HDFS,第二代参加了Cache来保存中间计算结果,第三代那么是Spark倡导的流技术Streaming
11.2运行本章中代码并理解MapReduce编程思路答略第章系统编程12Windows
12.1查间相关资料,解释注册表几大根键的用途答略
12.2选择一个编写好的Python程序,将其转换为exe可执行文件答:略,请参考书中相关介绍
12.3编写代码,使用至少3中不同的方法后动Windows自带的计算器程序答第一抻方法»import os»os.systemcalc.exe第二种方法»import os»os.popencalc.exe第三种方法:»importos»os.startfileCcalc.exe第四种方法»import win32api»win32api.ShellExecute0,open,calc.exe,,,1第五种方法»import win32process»handle=win32process.CreateProcessr,c:\windows\system32\calc.exe,u,None,None,0,win32process.CREATE_NO_WINDOW,None,None,win32process.STARTUPINFO
12.4编写代码,检测您所使用的操作系统版本答略,靖参考
12.5节
13.1简单表达创立线程的方法答Thread类支持使用两种方法来创立线程,一种是为构造函数传递一个可调用对象,另一种是继承Thread类并在派生类中重写_Jnit_和run方法创立了线程对象以后,可以调用其start方法来启动,垓方法自动调用该类对象的run方法,此时该线程处于alive状态,直至线程的run方法运行完毕
13.2简单表达Thread对象的方法答〔1〕joinjimeout]阻塞当前线程,等待被调线程完毕或都时后再继续执行当前线程的后续代码,参数timeout用来指定最长等待时间,单位为秒〔2〕isAlive测试线程是否处于运行状态〔3〕start自动调用run方法,启动线程,执行线程代码
[4]run线程代码,用来实现线程的功能与业务逻辑,可以在子类中重写垓方法来自定义线程的行为
13.3简单表达线程对象的daemon属性的作用和影响答在脚本运行过程中有一个主线程,假设在主线程中创立了子线程,当主线程完毕时根据子线程daemon属性值的不同可能会发生下面的两种情况之一1〕当某子线程的daemon属性为False时,主线程完毕时会检测该子线程是否完毕,如果该子线程尚未完成,那么主线程会等待它完成后再退出;2〕当某子线程的daemon属性为True时,主线程运行完毕时不对该子线程进展检查而直接退出,同时所有daemon值为True的子线程将随主线程一起完毕,而不管是否运行完成daemon属性的值默认为False,如果需要修改,那么必须在调用sta rt方法启动线程之前进展修改
13.4解释至少3种线程同步方法答1使用Cond市on对象可以在某些事件触发后才处理数据,可以用于不同线程之间的通信或通知,以实现更高级别的同步Condition对象除了具有acquire和release方法之当列表增加或删除元素时,列表对象自动进展内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的移动,效率较低,应尽量从列表尾部进展元素的增加与删除操作以提高处理速度
2.2编写程序,生成包含1000个0到100之间的随机整数,并统计每个元素的出现次数〔提示使用集合〕答1〕Python
3.
4.2代码import randomx=[random.randint0,100for iin rangeIOOO]d=setxfor vin d:printv,x.countv2〕Python
2.
7.8代码import randomx=[random.randint0,100for iin rangeIOOO]d=setxfor vin d:print v,x.countv
2.3编写程序,用户输入一个列表和2个整数作为下标,然后输出列表中介于2个下标之间的元素组成的子列表例如用户输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5,6]答1〕Python
3.
4.2代码x=inputPlease inputa list:x=evalxstart,end=evalinputPlease inputthe startposition andthe endposition:printx[start:end]2〕Python
2.
7.8代码x=inputCPIease inputa list:start,end=inputCPIease inputthe startposition andthe endposition:print x[start:end]
2.4设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的鲤不存在,那么输出“您输入的提不存在!笞:外,还有wait、notifys notifv_all等方法下面通过经典生产者/消费者问题来演示Condition对象的用法2Queue模块〔在Python3中为queue模块〕实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进展信息交换的场合,该模块的Queue对象实现了多线程编程所需要的所有预培义3Event对象是一抻简单的线程通信技术,一个线程设置Event对象,另一个线程等待Event对象Event对象的set方法可以设置Event对象内部的信号标志为真;clear方法可以去除Event对象内部的信号标志,将其设置为假;isSet方法用来判断其内部信号标志的状态;wait方法只有在其内部信号状态为真时将很快地执行并返回,假设Event对象的内部信号标志为假,wait方法招一直等待至超时或内部信号状态为真第章数据库编程
1414.1简单介绍SQLite数据库答SQLite是内嵌在Python中的轻量级、基于磁盘文件的数据库管理系统,不需要效劳器进程,支持使用SQL话句来访问数据库该数据库使用C话言开发,支持大多数SQL91标选,支持原子的、一致的、独立的和持久的事务,不支持外键限制;通过数据库级的独占性和共享锁定来实现独立事务,当多个线程同时访问同一个数据库并试图写入数据时,每一时刻只有一个线程可以写入数据SQLite支持2TB大小的单个数据库,每个数据库完全存储在单个磁盘文件中,以B+四数据构造的形式存储,一个数据库就是一个文件,通过简单复制即可实现数据库的备份
14.2使用Python内置函数dir查看Cursor对象中的方法,并使用内置函数help查看其用法答略
14.3表达使用Python操作Access数据库的步骤答⑴建立数据库连接import win
32.clientconn=win
32.client.DispatchrADODB.ConnectionDATA SOURCE=C:/MyDB.mdbconn.OpenDSN00〔2〕翻开记录集rs=Win
32.client.DispatchrADODB.Recordset rs_name=MyRecordset#表名rs.Open[+rs_name+conn,1,3〔3〕操作记录集rs.AddNewOrs.Fields.ltem
1.Value=data rs.Update〔4〕操作数据conn=win
32.client.DispatchrADODB.ConnectionDSN=PROVIDER二DATA S0URCE=C:/MyDB.mdb,sql.statement=Insert INTOo[Table_Name][Field_1],[Field_2]VALUES datal,data2conn.OpenDSNconn.Executesql_statement conn.Close〔5〕遍历记录rs.MoveFirst count=0while1:if rs.EOF:break else:count=count+1rs.MoveNext
14.4表达使用Python操作MS SQLServer数据库的步骤答可以使用pywin32和pymssql两抻不同的方式来访问MS SQLServer数据库先来了解一下pywin32模块访问MS SQLServer数据库的步骤〔1〕添加引用import adodbapiadodbapi.adodbapi.verbose=False#adds detailsto thesampleprintout importadodbapi.ado_consts asadc〔2〕创立连接:Cfg={,server,:
1192.
168.
29.86\\eclexpress,,password,:,xxxx,,,db,:,pscitemp,}constr=rProvider=SQLOLEDB.1Initial Catalog=%s DataSource=%s userID=%s Password=%s%o00o QCfg[db],Cfg[server],sa,Cfg[password]conn=adodbapi.connectconstr〔3〕执行sql话旬cur=conn.cursorsql=select*from softextBookwhere title={0}and remark3!={1}.formatbookName,flagcur.executesql data=cur.fetchall cur.close〔4〕执行存储过程:#假设proName有三个参数,最后一个参数传了nullret=cur.callprocproame,,parm1,parm2,None conn.mit〔5〕关闭连接conn.closeO接下来再通过一个例如来简单了解一下使用PVmssql模块访问MS SQLServer数据库的方法import pymssqlconn=pymssql.connecthost=SQL01user=user,password=,password,,database=mydatabase cur=conn.cursorcur.executeCREATE TABLEpersonsid INT,name VARCHARIOO1cur.executemanyINSERT INTOpersons VALUES%d,xinos.king,[1,John Doe,2,Jane Doe1]conn.mitOcur.executeSELECT*FROM personsWHERE salesrep=xinos.king,John Doerow=cur.fetchonewhile row:print ID=%d,Name=xinos.king%row
[0],row
[1]row=cur.fetchonecur.executeSELECT*FROM personsWHERE salesrepLIKE J%conn.closeO
14.5表达MySQLDb模块提供的数据库访问方法答Python访问MySQL数据库可以使用MySQLDb模块,该模块主要方法有•mit提交事务•rollback回滚事务•callprocself,proame,args用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数•executeself,query,args执行单条sql话句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数•executemanyself,query,args执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影闸的行数•nextsetself移动到下一个结果集•fetchallself接收全部的返回结果行•fetchmanyself,size二None接收size条返回结果行,如果size的值大于返回的结果行的数量,那么会返回cursor.arraysize条数据•fetchoneself返回一条结果行•scrollself,value,mode=relative移动指针到某一行,如果mode二Telativd,那么表示从当前所在行移动value条;如果mode=absolute,那么表示从结果集的第一行移动value条第章多媒体编程
1515.1编程程序,在窗口上绘制一个三角形,段置三个顶点为不同的颜色,并对内部进展光滑着色答from OpenGL.GL import*from OpenGL.GLUT import*from OpenGL.GLU import*import sysclassMyPyOpenGLTest:def_init_self,width=640,height=480,title=MyPyOpenGLTest:glutlnitsys.argvglutlnitDisplayModeGLUT_RGBA|GLUT.DOUBLE|GLUT_DEPTH glutlnitWindowSizewidth,heightself.window=glutCreateWindowtitle glutDisplayFuncself.DrawglutldleFuncself.Draw self.lnitGLwidth,height#default drawingfunctiondef Drawself:glClearGL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT glLoadldentityOglTranslatef-
2.0,
0.0,-
8.0#draw2D graphic,leaving zto be0glBeginGL_POLYGON glColor3f
1.0,
0.0,
0.0glVertex3f
0.0,
1.0,0,0glColor3f
0.0,
1.0,
0.0glVertex3f
1.0,-
1.0,
0.0glColor3f
0.0,
0.0,
1.0glVertex3f-
1.0,-
1.0,0,0glEnd glTranslatef
2.5,
0.0,
0.0glutSwapBuffersOdef lnitGLself,width,height:glClearColor
0.0,
0.0,
0.0,
0.0glClearDepthI.O glDepthFuncGL_LESSglShadeModelGL_SMOOTHglEnableGL_POINT_SMOOTHglEnableGL_LINE_SMOOTHglEnableGL_POLYGON_SMOOTHglMatrixModeGL_PROJECTIONglHintGL_POINT_SMOOTH_HINT,GL_NICESTglHintGL_LINE_SMOOTH_HINT,GL_NICESTglHintGL_POLYGON_SMOOTH_HINT,GL_FASTESTglLoadldentitygluPerspective
45.0,floatwidth/floatheight,
0.1,
100.0glMatrixModeGL_MODELVIEWdef MainLoopself:glutMainLoopOif_name_==w=MyPyOpenGLTestOw.MainLoop
15.2编写程序,读取两幅大小一样的图片,於后人两幅图像的内容叠加到一幅图像,结果图像中每个像素值为原两幅图像对应位置像素值的平均值答from PILimport Imageim1=Image.opend:\\pic
1.bmpim2=Image.opend:\\pic
2.bmpsize=iml.sizefor iin rangesize[O]:for jin rangesize
[1]:coIori=im
1.getpixeli,jcolor2=im
2.getpixeli,j r=coIori
[0]+color2
[0]//2g=coIori
[1]+color2
[1]//2b=coIori
[2]+color2
[2]//2im
1.putpixeli,j,r,g,biml.saveCd^picS.bmpim
1.closeim
2.close
15.3编写程序,读取一幅图像的内容,将其按象限分为4等价,然后
1、3象限内容交换,
2、4象限内容交换,生成一幅新图像答:from PILimport Imageim=Image.opend:\\pic
1.bmpim2=Image.opend:\\pic
1.bmpsize=im.sizebox1=0,size
[1]/2,size
[0]/2,size
[1]regionl=im.cropboxlbox2=0,0,size
[0]/2,size
[1]/2region2=im.cropbox2box3=size
[0]/2,0,size
[0],size
[1]/2regions=im.cropbox3box4=size
[0]/2,size
[1]/2,size
[0],size
[1]region4=im.cropbox4im
2.pasteregion1,box3im
2.pasteregion3,box1im
2.pasteregion2,box4im
2.pasteregion4,box2im
2.saved:\\pic
4.bmp,im.closeim
2.close
15.4结合GUI编程知识,编写一个程序,创立一个窗口并在上面放置两个按钿,分别为“开场播放”和“暂停播放,将本章
15.3节中的音乐播放程序进展封装答import wximportosimport pygameimportrandomimport timeimportthreadingclass wxGUIwx.App:def Onlnitself:frame=wx.Frameparent=None,title=MP3Player,size=250,150,pos=350,350panel=wx.Panelframe,-1self.buttonOK=wx.Buttonpanel,-1,Play,pos=30,60self.Bindwx.EVT_BUTTON,self.OnButtonOK,self.buttonOKself.buttonOK.Enabled=Trueself.buttonCancel=wx.Buttonpanel,-1,Stop,pos=120,60self.Bindwx.EVT_BUTTON,self.OnButtonCancel,self.buttonCancel self.buttonCancel.Enabled=Falseframe.Showreturn TruedefOnExitself:try:self.playing=Falsefinally:passdef playself:folder=rh:\musicmusics=[folder+W+music formusic inos.listdirfolder ifmusic.endswithC.mp3]total=lenmusicspygame.mixer.initwhile self.playing:if notpygame.mixer.music.get_busy:nextMusic=random.choicemusics pygame.mixer.music.loadnextMusicpygame.mixer.music.play1print playing....1,nextMusicelse:time.sleepldef OnButtonOKself,event:self.playing=True#create anew threadto playmusict=threading.Threadtarget=self.playt.startself.buttonOK.Enabled=Falseself.buttonCancel.Enabled=Truedef OnButtonCancelself,event:self.playing=Falseself.buttonOK.Enabled=Trueself.buttonCancel.Enabled=False app=wxGUIOapp.MainLoopO
15.5运行本章
15.4中的代码并查看运行结果咨略1〕Python
3.
4.2代码d={1:,a,2:,b,,3:c,,4:,d,}v=inputCPIease inputa key:v=evalv printd.getv您输入的的鲤不存在,2〕Python
2.
7.8代码d={1:,a1,2:,b,,3:,c,,4:,d}v=inputCPIease inputa key:printd.getv您输入的的不存在,
2.5编写程序,生成包含20个随机数的列表,然后招前10个元素升序排列,后10个元素降序排列,并输出结果答1〕Python
3.
4.2代码import randomx=[random.randint0,100for iin range20]printxy=x[0:10]y.sortx[0:10]=yy=x[10:20]y.sortreverse=Truex[10:20]=yprintx2〕Python
2.
7.8代码import randomx=[random.randintOJOO for iin range20]print xy=x[0:10]y.sortx[0:10]=yy=x[10:20]y.sortreverse=Truex[10:20]=yprint x
2.6在Python中,字典和集合都是用一对大括号作为定界符.字典的每个元素有两局部组成,即I和其中键不允许重复第章逆向工程与软件分析
1616.1下载PE文件规X
8.3版本,并尝试了解PE文件根本构造答略
16.2下载并安装IDA Pro与Immunity Debugger,并简单了解PE文件反汇编和调试步骤答略
16.3安装并配置IDAPython插件,然后运行本章小节的Python代码答略
16.4在Immunity Debugger调试器中运行本章小节中的代码答略
16.5表达软件调试断点的概念、作用及其分类答断点是最常用的软件调试技术之一,其根本思想是在某一个位置设置一个“陷阱”,当CPU执行到这个位置的时候停顿被调试的程序并中断到调试器中,让调试者进展分析和调试,调试者分析完毕后,可以让被调试程序恢复执行通过设置断点可以暂停程序执行,并可以观察和记录指令信息、变量值、堆枝参数和内存数据,还可以深入了解和把握程序执行的内部原理和详细过程,断点对于软件调试具有重要的意义和作用断点可以分为软件断点、硬件断点和内存断点三大类1]软件断点软件断点是一个单字节指令〔INT3,字节码为OxCC〕,可以在程序中设置多个软件断点,使得程序执行到该处时能够暂停执行,并将控制权转移给调试器的断点处理函数当调试器被告知在目标地址段置一个断点,匕首先读取目标地址的第一个字节的操作码,然后保存起来,同时把地址存储在内部的中断列表中接着,调试器把一个字节操作码“OxCC”写入刚刚的地址当CPU执行到“OxCC”操作码的时候就会触发一个“INT3中断事件,此时调试器就能捕捉到这个事件调试器继续判断这个发生中断事件的地址(通过指令指针存放器日P)是不是自己先前设置断点的地址如果在调试器内部的断点列表中找到了这个地址,就将段置断点前存储起来的操作码写回到目标地址,这样进程被调试器恢复后就能正常的执行2〕硬件断点硬件断点通过调试存放器实现,设置在CPU级别上,当需要调试某个指定区域而又无法修改垓区域时,硬件断点非常有用—个CPU一般会有8个调试存放器〔DRO存放器到DR7存放器〕,用于管理硬件断点其中调试存放器DRO到调试存放器DR3存储硬件断点地址,同一时间内最多只能设置4个硬件断点;DR4和DR5保存,DR6是状态存放器,说明被断点触发的调试事件的类型;DR7本质上是一个硬件断点的开关存放器,同时也存储了断点的不同类型通过在DR7存放器里设置不同标志,能够创立以下几种的点当特定的地址上有指令执行的时候中断、当特定的地址上有数据写人的时候、当特定的地址上有数据读或者写但不执行的时候硬件断点使用“INT1实现,该中断负责硬件中断和步进事件步进是指根据预定的流程一条一条地执行指令,每执行完一条指令后暂停下来,从而可以准确地观察关键代码并监视存放器和内存数据的变化在CPU每次执行代码之前,郡会先确认当前将要执行代码的地址是否是硬件断点的地址,同时也要确认是否有代码要访问被段置了硬件断点的内存区域如果任何储;存在DR0-DR3中的地址所指向的区域被访问了,就会触发“INT1中断,同时暂停CPU如果不是中断地址那么CPU执行该行代码,到下一行代码时,CPU继续重复上面的过程3]内存3,点内存断点是通过修改内存中指定块或页的访问权限来实现的通过将指定内存块或页的访问权限属性设置为受保护的,那么任何不符合访问权限约束的操作都将失败,并抛出异常,导致CPU暂停执行,使得调试器可以查看当前执行状态—般来说,每个内存块或页的访问权限都由三抻不同的访问权限组成是否可执行、是否可读、是否可写每个操作系统都提供了用来查询和修改内存页访问权限的函数,在Windows操作系统中可以使用VirtualProtect函数来修改主调进程虚拟地址空间中已提交页面的保护属性,使用VirtualProtectEx函数可以修改其他进程虚拟地址空间页面的保护属性
16.6运行本章
16.4节中的代码并查看运行结果答略第章科学计算与可视化
1717.1运行本章所有代码并查看运行结果答略
17.2使用Python内置函数dir查看scipy模块中的对象与方法,并使用Python内置函数help查看其使用说明答略
17.3假设有列表a=[name,age,sex1]和b=[Dong,38,Male1],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为键,以列表b中的元素为值,这个话句可以写为c二dictzipa,b Q
17.4设有一个列表a,现要求从列表a中每3个元素取1个,并且招取到的元素组成新的列表b,可以使用语句b=
17.5用列表推导式生成包含10个数字5的列表,话句可以写为[5for iin range10]
2.10o不可以〔可以、不可以〕使用del命令来删除元组中的局部元素第章选择构造与循环构造
33.1分析谡辑运算符广的短路求值特性答假设有表达式“表达式1or表达式2”,如果表达式1的值等价于True,那么无论表达式2的值是什么,整个表达式的值总是等价于True因此,不需要再计算表达式2的值
3.2编写程序,运行后用户输入4位整数作为年份,判断其是否为闰年如果年价能被400整除,那么为同年;如果年价能被4整除但不能被100整除也为闰年答1〕Python
3.
4.2代码x=inputPlease inputan integerof4digits meaningthe year:x=evalxif x%400==0or x%4==0and notx%100==0:printCYeselse:printCNo2〕Python
2.
7.8代码x=inputPlease inputan integerof4digits meaningthe year:if x%400==0or x%4==0and notx%100==0:print Yeselse:print No
3.3编写程序,生成一个包含50个随机整数的列表,然后删除其中所有奇数〔提示从后向前删答1〕Python
3.
4.2代码import randomx=[random.randint0,100foriin range50]printxi=lenx-1while i=0:if x[i]%2==1:del x[i]i-=1printx2〕Python
2.
7.8代码把上面的代码中第三行和最后一行改为printx即可34编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进展降序排列,奇数下标的元素不变〔提示使用切片〕答1〕Python
3.
4.2代码import randomx=[random.randint0,100foriinrange20]printxy=x[::2]y.sortreverse=Truex[::2]=yprintx2〕Python
2.
7.8代码把上面的代码中第三行和最后一行改为printx即可35编写程序,用户从键盘输入小于1000的整数,对其进展因式分解例如,10=2x5,60=2x2x3x5答1〕Python3,
4.2代码x=inputPlease inputanintegerless than1000:x=evalx t=x i=2result=[]while True:if t==1:breakif t%i==O:⑴result,appendt=t/ielse:i+=1Print x,,=1,,*,.joinmapstr,result2〕Python2,
7.8代码x=inputCPIease inputanintegerless than1000:t=x1=2result=[]while True:if t==1:breakift%i==O:result.appendit=t/ielse:i+=1print x,=,*,.joinmapstr,result
1.6编写程序,至少使用2种不同的方法计算100以内所有奇数的和答Python3,4,2代码如下,如果使用只需要把其中的print函数改为print语句即可x=[i foriinrange1,100if i%2==1]printsumxprintsumrange1,100[::2]
1.7编写程序,实现分段函数计算,如下表所示X yx000=x5X5=x103x-510=x
200.5x-220=x0答Python342代码如下,如果使用只需要把其中的print函数改为print语句即可x=inputPlease inputx:x=evalxif x0or x=20:printOelif0=x5:printxelif5=x10:print3*x-5elif10=x20:print
0.5*x-2第章字符串与正那么表达式
44.1假设有一段英文,其中有单独的字母I误写为i,请编写程序进展纠正答这里给出代码,如果使用的话只需要修改其中的print函数为print语句即可1]不使用正那么表达式x=i ama teacher,i am man,and i am38years old.I amnot abusinessman.x=x.replacei,lx=x.replaceC i7Iprintx2〕使用正那么表达武x=i ama teacher,iamman,and iam38years old.I amnot abusinessman.import repattern=re.piler r\w]|\bi r\w]while True:result=pattern.searchxif result:if result.startO!=0:x=x[:result.start0+1]+T+x[result.end0-1:]else:x=x[:result.start0]+T+x[resultend0-1:]else:breakprintx
4.2假设有一段英文,其中有单词中间的字母i误写为I”,请编写程序进展现正笞这里给出Python3,
4.2代码,如果使用的话只需要修改其中的print函数为print培句即可import rex=I ama teacher,!amman,and I am38years old.Iamnot abusinessman.printxpattern=re.piler,:[\w]l:[\w]while True:result=pattern.searchxif result:if result.startO!=0:x=x[:result.start0+1]+i+x[result.end0-1:]。
个人认证
优秀文档
获得点赞 0