Python程序设计方案习题与答案样本_第1页
Python程序设计方案习题与答案样本_第2页
Python程序设计方案习题与答案样本_第3页
Python程序设计方案习题与答案样本_第4页
Python程序设计方案习题与答案样本_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

《Python程序设计》习题与参照答案第1章基本知识1.1简朴阐明如何选取对的Python版本。答:在选取Python时候,一定要先考虑清晰自己学习Python目是什么,打算做哪方面开发,有哪些扩展库可用,这些扩展库最高支持哪个版本Python,是Python2.x还是Python3.x,最高支持到Python2.7.6还是Python2.7.9。这些问题都拟定后来,再做出自己选取,这样才干事半功倍,而不至于把大量时间挥霍在Python重复安装和卸载上。同步还应当注意,当更新Python版本推出之后,不要急于更新,而是应当等拟定自己所必要使用扩展库也推出了较新版本之后再进行更新。尽管如此,Python3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域应用开发,或者仅仅是为了尝试一种新、好玩语言,那么请毫不踌躇地选取Python3.x系列最高版本(当前是Python3.4.3)。1.2为什么说Python采用是基于值内存管理模式?答:Python采用是基于值内存管理方式,如果为不同变量赋值相似值,则在内存中只有一份该值,各种变量指向同一块内存地址,例如下面代码。>>>x=3>>>id(x)10417624>>>y=3>>>id(y)10417624>>>y=5>>>id(y)10417600>>>id(x)104176241.3在Python中导入模块中对象有哪几种方式?答:惯用有三种方式,分别为import模块名[as别名]from模块名import对象名[as别名]frommathimport*1.4使用pip命令安装numpy、scipy模块。答:在命令提示符环境下执行下面命令:pipinstallnumpypipinstallscipy1.5编写程序,顾客输入一种三位以上整数,输出其百位以上数字。例如顾客输入1234,则程序输出12。(提示:使用整除运算。)答:1)Python3.4.2代码:x=input('Pleaseinputanintegerofmorethan3digits:')try:x=int(x)x=x//100ifx==0:print('Youmustinputanintegerofmorethan3digits.')else:print(x)exceptBaseException:print('Youmustinputaninteger.')2)Python2.7.8代码:importtypesx=input('Pleaseinputanintegerofmorethan3digits:')iftype(x)!=types.IntType:print'Youmustinputaninteger.'eliflen(str(x))!=4:print'Youmustinputanintegerofmorethan3digits.'else:printx//100第2章Python数据构造2.1为什么应尽量从列表尾部进行元素增长与删除操作?答:当列表增长或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素移动,效率较低,应尽量从列表尾部进行元素增长与删除操作以提高解决速度。2.2编写程序,生成包括1000个0到100之间随机整数,并记录每个元素浮现次数。(提示:使用集合。)答:1)Python3.4.2代码importrandomx=[random.randint(0,100)foriinrange(1000)]d=set(x)forvind:print(v,':',x.count(v))2)Python2.7.8代码importrandomx=[random.randint(0,100)foriinrange(1000)]d=set(x)forvind:printv,':',x.count(v)2.3编写程序,顾客输入一种列表和2个整数作为下标,然后输出列表中介于2个下标之间元素构成子列表。例如顾客输入[1,2,3,4,5,6]和2,5,程序输出[3,4,5,6]。答:1)Python3.4.2代码x=input('Pleaseinputalist:')x=eval(x)start,end=eval(input('Pleaseinputthestartpositionandtheendposition:'))print(x[start:end])2)Python2.7.8代码x=input('Pleaseinputalist:')start,end=input('Pleaseinputthestartpositionandtheendposition:')printx[start:end]2.4设计一种字典,并编写程序,顾客输入内容作为键,然后输出字典中相应值,如果顾客输入键不存在,则输出“您输入键不存在!”答:1)Python3.4.2代码d={1:'a',2:'b',3:'c',4:'d'}v=input('Pleaseinputakey:')v=eval(v)print(d.get(v,'您输入键不存在'))2)Python2.7.8代码d={1:'a',2:'b',3:'c',4:'d'}v=input('Pleaseinputakey:')print(d.get(v,'您输入键不存在'))2.5编写程序,生成包括20个随机数列表,然后将前10个元素升序排列,后10个元素降序排列,并输出成果。答:1)Python3.4.2代码importrandomx=[random.randint(0,100)foriinrange(20)]print(x)y=x[0:10]y.sort()x[0:10]=yy=x[10:20]y.sort(reverse=True)x[10:20]=yprint(x)2)Python2.7.8代码importrandomx=[random.randint(0,100)foriinrange(20)]printxy=x[0:10]y.sort()x[0:10]=yy=x[10:20]y.sort(reverse=True)x[10:20]=yprintx2.6在Python中,字典和集合都是用一对大括号作为定界符,字典每个元素有两某些构成,即键和值,其中键不容许重复。2.7假设有列表a=['name','age','sex']和b=['Dong',38,'Male'],请使用一种语句将这两个列表内容转换为字典,并且以列表a中元素为键,以列表b中元素为值,这个语句可以写为c=dict(zip(a,b))。2.8假设有一种列表a,现规定从列表a中每3个元素取1个,并且将取到元素构成新列表b,可以使用语句b=a[::3]。2.9使用列表推导式生成包括10个数字5列表,语句可以写为[5foriinrange(10)]。2.10不可以(可以、不可以)使用del命令来删除元组中某些元素。第3章选取构造与循环构造3.1分析逻辑运算符“or”短路求值特性。答:假设有表达式“表达式1or表达式2”,如果表达式1值等价于True,那么无论表达式2值是什么,整个表达式值总是等价于True。因而,不需要再计算表达式2值。3.2编写程序,运营后顾客输入4位整数作为年份,判断其与否为闰年。如果年份能被400整除,则为闰年;如果年份能被4整除但不能被100整除也为闰年。答:1)Python3.4.2代码x=input('Pleaseinputanintegerof4digitsmeaningtheyear:')x=eval(x)ifx%400==0or(x%4==0andnotx%100==0):print('Yes')else:print('No')2)Python2.7.8代码x=input('Pleaseinputanintegerof4digitsmeaningtheyear:')ifx%400==0or(x%4==0andnotx%100==0):print'Yes'else:print'No'3.3编写程序,生成一种包括50个随机整数列表,然后删除其中所有奇数。(提示:从后向前删。)答:1)Python3.4.2代码importrandomx=[random.randint(0,100)foriinrange(50)]print(x)i=len(x)-1whilei>=0:ifx[i]%2==1:delx[i]i-=1print(x)2)Python2.7.8代码把上面代码中第三行和最后一行改为printx即可。34编写程序,生成一种包括20个随机整数列表,然后对其中偶数下标元素进行降序排列,奇数下标元素不变。(提示:使用切片。)答:1)Python3.4.2代码importrandomx=[random.randint(0,100)foriinrange(20)]print(x)y=x[::2]y.sort(reverse=True)x[::2]=yprint(x)2)Python2.7.8代码把上面代码中第三行和最后一行改为printx即可。35编写程序,顾客从键盘输入不大于1000整数,对其进行因式分解。例如,10=2×5,60=2×2×3×5。答:1)Python3.4.2代码x=input('Pleaseinputanintegerlessthan1000:')x=eval('x')t=xi=2result=[]whileTrue:ift==1:breakift%i==0:result.append(i)t=t/ielse:i+=1Printx,'=','*'.join(map(str,result))2)Python2.7.8代码x=input('Pleaseinputanintegerlessthan1000:')t=xi=2result=[]whileTrue:ift==1:breakift%i==0:result.append(i)t=t/ielse:i+=1printx,'=','*'.join(map(str,result))3.6编写程序,至少使用2种不同办法计算100以内所有奇数和。答:Python3.4.2代码如下,如果使用Python2.7.8只需要把其中print()函数改为print语句即可。x=[iforiinrange(1,100)ifi%2==1]print(sum(x))print(sum(range(1,100)[::2]))3.7编写程序,实现分段函数计算,如下表所示。xyx<000<=x<5x5<=x<103x-510<=x<200.5x-220<=x0答:Python3.4.2代码如下,如果使用Python2.7.8只需要把其中print()函数改为print语句即可。x=input('Pleaseinputx:')x=eval(x)ifx<0orx>=20:print(0)elif0<=x<5:print(x)elif5<=x<10:print(3*x-5)elif10<=x<20:print(0.5*x-2)

第4章字符串与正则表达式4.1假设有一段英文,其中有单独字母“I”误写为“i”,请编写程序进行纠正。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。1)不使用正则表达式x="iamateacher,iamman,andiam38yearsold.Iamnotabusinessman."x=x.replace('i','I')x=x.replace('i','I')print(x)2)使用正则表达式x="iamateacher,iamman,andiam38yearsold.Iamnotabusinessman."importrepattern=pile(r'(?:[^\w]|\b)i(?:[^\w])')whileTrue:result=pattern.search(x)ifresult:ifresult.start(0)!=0:x=x[:result.start(0)+1]+'I'+x[result.end(0)-1:]else:x=x[:result.start(0)]+'I'+x[result.end(0)-1:]else:breakprint(x)4.2假设有一段英文,其中有单词中间字母“i”误写为“I”,请编写程序进行纠正。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。importrex="Iamateacher,Iamman,andIam38yearsold.IamnotabusInessman."print(x)pattern=pile(r'(?:[\w])I(?:[\w])')whileTrue:result=pattern.search(x)ifresult:ifresult.start(0)!=0:x=x[:result.start(0)+1]+'i'+x[result.end(0)-1:]else:x=x[:result.start(0)]+'i'+x[result.end(0)-1:]else:breakprint(x)4.3有一段英文文本,其中有单词持续重复了2次,编写程序检查重复单词并只保存一种。例如文本内容为“Thisisisadesk.”,程序输出为“Thisisadesk.”答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。1)办法一importrex='Thisisaadesk.'pattern=pile(r'\b(\w+)(\s+\1){1,}\b')matchResult=pattern.search(x)x=pattern.sub(matchResult.group(1),x)print(x)2)办法二x='Thisisaadesk.'pattern=pile(r'(?P<f>\b\w+\b)\s(?P=f)')matchResult=pattern.search(x)x=x.replace(matchResult.group(0),matchResult.group(1))4.4简朴解释Python字符串驻留机制。答:Python支持字符串驻留机制,即:对于短字符串,将其赋值给各种不同对象时,内存中只有一种副本,各种对象共享该副本。这一点不合用于长字符串,即长字符串不遵守驻留机制,下面代码演示了短字符串和长字符串在这方面区别。>>>a='1234'>>>b='1234'>>>id(a)==id(b)True>>>a='1234'*50>>>b='1234'*50>>>id(a)==id(b)False4.5编写程序,顾客输入一段英文,然后输出这段英文中所有长度为3个字母单词。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。importrex=input('Pleaseinputastring:')pattern=pile(r'\b[a-zA-Z]{3}\b')print(pattern.findall(x))

第5章函数设计与使用5.1运营5.3.1小节最后示例代码,查当作果并分析因素。答:因素是对于函数默认值参数只会被解决一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次成果,对于列表这样构造,如果调用函数时为默认值参数列表插入或删除了元素,将会得到保存,从而影响下一次调用。5.2编写函数,判断一种整数与否为素数,并编写主程序调用该函数。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。importmathdefIsPrime(v):n=int(math.sqrt(v)+1)foriinrange(2,n):ifv%i==0:return'No'else:return'Yes'print(IsPrime(37))print(IsPrime(60))print(IsPrime(113))5.3编写函数,接受一种字符串,分别记录大写字母、小写字母、数字、其她字符个数,并以元组形式返回成果。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。defdemo(v):capital=little=digit=other=0foriinv:if'A'<=i<='Z':capital+=1elif'a'<=i<='z':little+=1elif'0'<=i<='9':digit+=1else:other+=1return(capital,little,digit,other)x='capital=little=digit=other=0'print(demo(x))5.4在Python程序中,局部变量会隐藏同名全局变量吗?请编写代码进行验证。答案:会。>>>defdemo(): a=3 printa>>>a=5>>>demo()3>>>a55.5编写函数,可以接受任意各种整数并输出其中最大值和所有整数之和。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。defdemo(*v):print(v)print(max(v))print(sum(v))demo(1,2,3)demo(1,2,3,4)demo(1,2,3,4,5)5.6编写函数,模仿内置函数sum()。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。defSum(v):s=0foriinv:s+=ireturnsx=[1,2,3,4,5]print(Sum(x))x=(1,2,3,4,5)print(Sum(x))5.7编写函数,模仿内置函数sorted()。答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print()函数为print语句即可。defSorted(v):t=v[::]r=[]whilet:tt=min(t)r.append(tt)t.remove(tt)returnrx=[1,3,5,2,1,0,9,7]print(x)print(Sorted(x))

第6章面向对象程序设计6.1继承6.5节例2中Person类生成Student类,填写新函数用来设立学生专业,然后生成该类对象并显示信息。答:Python3.4.2代码为importtypesclassPerson(object):#基类必要继承于object,否则在派生类中将无法使用super()函数def__init__(self,name='',age=20,sex='man'):self.setName(name)self.setAge(age)self.setSex(sex)defsetName(self,name):ifnotisinstance(name,str):print('namemustbestring.')returnself.__name=namedefsetAge(self,age):ifnotisinstance(age,int):print('agemustbeinteger.')returnself.__age=agedefsetSex(self,sex):ifsex!='man'andsex!='woman':print('sexmustbe"man"or"woman"')returnself.__sex=sexdefshow(self):print(self.__name)print(self.__age)print(self.__sex)classStudent(Person):def__init__(self,name='',age=30,sex='man',major='Computer'):#调用基类构造办法初始化基类私有数据成员super(Student,self).__init__(name,age,sex)self.setMajor(major)#初始化派生类数据成员defsetMajor(self,major):ifnotisinstance(major,str):print('majormustbeastring.')returnself.__major=majordefshow(self):super(Student,self).show()print(self.__major)if__name__=='__main__':zhangsan=Person('ZhangSan',19,'man')zhangsan.show()lisi=Student('LiSi',32,'man','Math')lisi.show()6.2设计一种三维向量类,并实现向量加法、减法以及向量与标量乘法和除法运算。答:Python3.4.2代码如下classVecter3:def__init__(self,x=0,y=0,z=0):self.X=xself.Y=yself.Z=zdef__add__(self,n):r=Vecter3()r.X=self.X+n.Xr.Y=self.Y+n.Yr.Z=self.Z+n.Zreturnrdef__sub__(self,n):r=Vecter3()r.X=self.X-n.Xr.Y=self.Y-n.Yr.Z=self.Z-n.Zreturnrdef__mul__(self,n):r=Vecter3()r.X=self.X*nr.Y=self.Y*nr.Z=self.Z*nreturnrdef__truediv__(self,n):r=Vecter3()r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturnrdef__floordiv__(self,n):r=Vecter3()r.X=self.X//nr.Y=self.Y//nr.Z=self.Z//nreturnrdefshow(self):print((self.X,self.Y,self.Z))v1=Vecter3(1,2,3)v2=Vecter3(4,5,6)v3=v1+v2v3.show()v4=v1-v2v4.show()v5=v1*3v5.show()v6=v1/2v6.show()6.3面向对象程序设计三要素分别为封装、继承和多态。6.4简朴解释Python中如下划线开头变量名特点。答:在Python中,如下划线开头变量名有特殊含义,特别是在类定义中。用下划线作为变量前缀和后缀来表达类特殊成员:_xxx:这样对象叫做保护变量,不能用'frommoduleimport*'导入,只有类对象和子类对象能访问这些变量;__xxx__:系统定义特殊成员名字;__xxx:类中私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样特殊方式来访问。Python中没有纯粹C++意义上私有成员。6.5与运算符“**”相应特殊办法名为__pow__(),与运算符“//”相应特殊办法名为__floordiv__()。

第7章文献操作7.1假设有一种英文文本文献,编写程序读取其内容,并将其中大写字母变为小写字母,小写字母变为大写字母。答:f=open(r'd:\1.txt','r')s=f.readlines()f.close()r=[i.swapcase()foriins]f=open(r'd:\2.txt','w')f.writelines(r)f.close()7.2编写程序,将包括学生成绩字典保存为二进制文献,然后再读取内容并显示。答:Python3.4.2代码importpickled={'张三':98,'李四':90,'王五':100}print(d)f=open('score.dat','wb')pickle.dump(1,f)pickle.dump(d,f)f.closef=open('score.dat','rb')pickle.load(f)d=pickle.load(f)f.close()print(d)7.3使用shutil模块中move()办法进行文献移动。答:>>>importshutil>>>shutil.move(r'd:\1.txt',r'e:\1.txt')'e:\\1.txt'7.4简朴解释文本文献与二进制文献区别。答:(1)文本文献文本文献存储是常规字符串,由若干文本行构成,普通每行以换行符'\n'结尾。常规字符串是指记事本或其她文本编辑器能正常显示、编辑并且人类可以直接阅读和理解字符串,如英文字母、中文、数字字符串。文本文献可以使用字解决软件如gedit、记事本进行编辑。(2)二进制文献二进制文献把对象内容以字节串(bytes)进行存储,无法用记事本或其她普通字解决软件直接进行编辑,普通也无法被人类直接阅读和理解,需要使用专门软件进行解码后读取、显示、修改或执行。常用如图形图像文献、音视频文献、可执行文献、资源文献、各种数据库文献、各类office文档等都属于二进制文献。7.5编写代码,将当前工作目录修改为“c:\”,并验证,最后将当前工作目录恢复为本来目录。答:>>>importos>>>os.getcwd()'C:\\Python34'>>>os.chdir(r'c:\\')>>>os.getcwd()'c:\\'>>>os.chdir(r'c:\Python34')>>>os.getcwd()'c:\\Python34'7.6编写程序,顾客输入一种目录和一种文献名,搜索该目录及其子目录中与否存在该文献。答:1)Python3.4.2代码importsysimportosdirectory=sys.argv[1]filename=sys.argv[2]paths=os.walk(directory)forroot,dirs,filesinpaths:iffilenameinfiles:print('Yes')breakelse:print('No')2)Python2.7.8代码importsysimportosdirectory=sys.argv[1]filename=sys.argv[2]paths=os.walk(directory)forroot,dirs,filesinpaths:iffilenameinfiles:print'Yes'breakelse:print'No'

第8章异常解决构造与程序调试8.1Python异常解决构造有哪几种形式?答:比较惯用形式有:1)原则异常解决构造try: try块#被监控语句,也许会引起异常exceptException[,reason]: except块 #解决异常代码如果需要捕获所有异常时,可以使用BaseException,代码格式如下:try:……exceptBaseException,e: except块 #解决所有错误上面构造可以捕获所有异常,尽管这样做很安全,但是普通并不建议这样做。对于异常解决构造,普通建议是尽量显式捕获也许会浮现异常并且有针对性地编写代码进行解决,由于在实际应用开发中,很难使用同一段代码去解决所有类型异常。固然,为了避免漏掉没有得到解决异常干扰程序正常执行,在捕获了所有也许想到异常之后,您也可以使用异常解决构造最后一种except来捕获BaseException。2)此外一种惯用异常解决构造是try...except...else...语句。3)在实际开发中,同一段代码也许会抛出各种异常,需要针对不同异常类型进行相应解决。为了支持各种异常捕获和解决,Python提供了带有各种except异常解决构造,此类似于多分支选取构造,一旦某个except捕获了异常,则背面剩余except子句将不会再执行。语法为:try: try块 #被监控语句exceptException1: except块1 #解决异常1语句exceptException2: except块2 #解决异常2语句4)将要捕获异常写在一种元组中,可以使用一种except语句捕获各种异常,并且共用同一段异常解决代码,固然,除非拟定要捕获各种异常可以使用同一段代码来解决,并不建议这样做。5)最后一种惯用异常解决构造是try...except...finally...构造。在该构造中,finally子句中内存无论与否发生异常都会执行,惯用来做某些清理工作以释放try子句中申请资源。语法如下:try:…… finally: ...... #无论如何都会执行代码8.2异常和错误有什么区别?答:异常是指由于程序执行过程中出错而在正常控制流以外采用行为。严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在对象,或者试图访问不存在文献,等等。8.3使用pdb模块进行Python程序调试重要有哪几种用法?答:重要有三种方式,1)在交互模式下使用pdb模块提供功能可以直接调试语句块、表达式、函数等各种脚本。2)在程序中嵌入断点来实现调试功能在程序中一方面导入pdb模块,然后使用pdb.set_trace()在需要位置设立断点。如果程序中存在通过该办法调用显式插入断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,虽然该程序当前不处在调试状态。3)使用命令行调试程序在命令行提示符下执行“python–mpdb脚本文献名”,则直接进入调试环境;当调试结束或程序正常结束后来,pdb将重启该程序。8.4Python内建异常类基类是BaseException。8.5断言语句语法为assert。8.6Python上下文管理语句是with。第9章GUI编程9.1设计一种窗体,并放置一种按钮,单击按钮后弹出颜色对话框,关闭颜色对话框后提示选中颜色。答:Python2.7.8代码如下,importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title='wxGUI',size=(160,140))panel=wx.Panel(frame,-1)buttonOK=wx.Button(panel,-1,'OK',pos=(0,0))self.Bind(wx.EVT_BUTTON,self.OnButtonOK,buttonOK)frame.Show()returnTruedefOnButtonOK(self,event):colorDlg=wx.ColourDialog(None)colorDlg.ShowModal()color=colorDlg.GetColourData().Colourwx.MessageBox(str(color))app=wxGUI()app.MainLoop()9.2设计一种窗体,并放置一种按钮,按钮默认文本为“开始”,单击按钮后文本变为“结束”,再次单击后变为“开始”,循环切换。答:Python2.7.8代码如下,importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title='wxGUI',size=(160,140))panel=wx.Panel(frame,-1)self.buttonOK=wx.Button(panel,-1,'Start',pos=(0,0))self.Bind(wx.EVT_BUTTON,self.OnButtonOK,self.buttonOK)frame.Show()returnTruedefOnButtonOK(self,event):text=self.buttonOK.GetLabelText()iftext=='Start':self.buttonOK.SetLabelText('End')eliftext=='End':self.buttonOK.SetLabelText('Start')app=wxGUI()app.MainLoop()9.3设计一种窗体,模仿QQ登录界面,当顾客输入号码123456和密码654321时提示对的,否则提示错误。答:Python2.7.8代码如下,importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title='Login',size=(250,150),pos=(350,350))panel=wx.Panel(frame,-1)label1=wx.StaticText(panel,-1,'UserName:',pos=(0,10),style=wx.ALIGN_RIGHT)label2=wx.StaticText(panel,-1,'Password:',pos=(0,30),style=wx.ALIGN_RIGHT)self.textName=wx.TextCtrl(panel,-1,pos=(70,10),size=(160,20))self.textPwd=wx.TextCtrl(panel,-1,pos=(70,30),size=(160,20),style=wx.TE_PASSWORD)buttonOK=wx.Button(panel,-1,'OK',pos=(30,60))self.Bind(wx.EVT_BUTTON,self.OnButtonOK,buttonOK)buttonCancel=wx.Button(panel,-1,'Cancel',pos=(120,60))self.Bind(wx.EVT_BUTTON,self.OnButtonCancel,buttonCancel)buttonOK.SetDefault()frame.Show()returnTruedefOnButtonOK(self,event):usrName=self.textName.GetValue()usrPwd=self.textPwd.GetValue()ifusrName=='123456'andusrPwd=='654321':wx.MessageBox('Right')else:wx.MessageBox('Wrong')defOnButtonCancel(self,event):passapp=wxGUI()app.MainLoop()

第10章网络程序设计10.1简朴解释TCP和UDP合同区别。答:TCP合同是面向连接、具备质量保证可靠传播合同,但开销较大;UDP合同是尽最大能力传播无连接合同,开销小,惯用于视频在线点播(VideoOnDemand,VOD)之类应用。TCP合同和UDP合同并没有优劣之分,仅仅是合用场合有所不同。10.2同窗之间合伙编写UDP通信程序,分别编写发送端和接受端代码,发送端发送一种字符串“Helloworld!”。假设接受端在计算机5000端口进行接受,并显示接受内容。答:一方面使用ipconfig/all命令查看本机IP地址,然后分别编写下面代码,并将其中IP地址替代为相应IP地址。接受端代码:importsockets=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",5000))#空字符串表达本机任何可用IP地址data,addr=s.recvfrom(1024)#缓冲区大小为1024字节print'receivedmessage:%s'%data#显示接受到内容s.close()发送端代码:importsockets=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.sendto("Hello,world!",("48",5000))#假设48是接受端主机IP地址s.close()10.3简朴简介socket模块中用于TCP编程惯用办法。TCP普通用于规定可靠数据传播场合。编写TCP程序时经常需要用到socket模块办法重要有:connect(address):连接远程计算机send(bytes[,flags]):发送数据recv(bufsize[,flags]):接受数据bind(address):绑定地址listen(backlog):开始监听,等待客户端连接accept():响应客户端祈求10.4编写代码读取搜狐网页首页内容。答:>>>importurllib.request>>>dir(urllib.request)>>>fp=urllib.request.urlopen('')>>>dir(fp)>>>print(fp.read(100))>>>fp.close()10.5在自己机器上配备IIS以支持Python脚本运营,然后使用Python编写脚本,运营后在网页上显示“Helloworld!”。答:核心代码为printprint'Status:200OK'print'Content-type:text/html'printprint'<HTML><HEAD><TITLE>PythonSampleCGI</TITLE></HEAD>'print'<BODY>'print'<H1>Thisisaheader</H1>'print'<p>Helloworld!'print'<br>'print'</BODY>'

第11章大数据解决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升级版本,兼容HadoopAPI,可以读写HadoopHDFSHBASE顺序文献等,与之不同是将成果保存在内存中。Hadoop作为第一代产品使用了HDFS,第二代加入了Cache来保存中间计算成果,第三代则是Spark倡导流技术Streaming。11.2运营本章中代码并理解MapReduce编程思路。答:略

第12章Windows系统编程12.1查阅有关资料,解释注册表几大根键用途。答:略12.2选取一种编写好Python程序,将其转换为exe可执行文献。答:略,请参照书中有关简介。12.3编写代码,使用至少3中不同办法启动Windows自带计算器程序。答:第一种办法:>>>importos>>>os.system('calc.exe')第二种办法:>>>importos>>>os.popen('calc.exe')第三种办法:>>>importos>>>os.startfile('calc.exe')第四种办法:>>>importwin32api>>>win32api.ShellExecute(0,'open','calc.exe','','',1)第五种办法:>>>importwin32process>>>handle=win32process.CreateProcess(r'c:\windows\system32\calc.exe','',None,None,0,win32process.CREATE_NO_WINDOW,None,None,win32process.STARTUPINFO())12.4编写代码,检测您所使用操作系统版本。答:略,请参照12.5节。

第13章多线程编程13.1简朴论述创立线程办法。答:Thread类支持使用两种办法来创立线程,一种是为构造函数传递一种可调用对象,另一种是继承Thread类并在派生类中重写__init__()和run()办法。创立了线程对象后来,可以调用其start()办法来启动,该办法自动调用该类对象run()办法,此时该线程处在alive状态,直至线程run()办法运营结束。13.2简朴论述Thread对象办法。答:(1)join([timeout]:阻塞当前线程,等待被调线程结束或超时后再继续执行当前线程后续代码,参数timeout用来指定最长等待时间,单位为秒。(2)isAlive():测试线程与否处在运营状态(3)start():自动调用run()办法,启动线程,执行线程代码。(4)run():线程代码,用来实现线程功能与业务逻辑,可以在子类中重写该办法来自定义线程行为。13.3简朴论述线程对象daemon属性作用和影响。答:在脚本运营过程中有一种主线程,若在主线程中创立了子线程,当主线程结束时依照子线程daemon属性值不同也许会发生下面两种状况之一:1)当某子线程daemon属性为False时,主线程结束时会检测该子线程与否结束,如果该子线程尚未完毕,则主线程会等待它完毕后再退出;2)当某子线程daemon属性为True时,主线程运营结束时不对该子线程进行检查而直接退出,同步所有daemon值为True子线程将随主线程一起结束,而无论与否运营完毕。daemon属性值默以为False,如果需要修改,则必要在调用start()办法启动线程之迈进行修改。13.4解释至少3种线程同步办法。答:使用Condition对象可以在某些事件触发后才解决数据,可以用于不同线程之间通信或告知,以实现更高档别同步。Condition对象除了具备acquire()和release()办法之外,尚有wait()、notify()、notify_all()等办法。下面通过典型生产者/消费者问题来演示Condition对象用法。Queue模块(在Python3中为queue模块)实现了多生产者/多消费者队列,特别适合需要在各种线程之间进行信息互换场合,该模块Queue对象实现了多线程编程所需要所有锁语义。Event对象是一种简朴线程通信技术,一种线程设立Event对象,另一种线程等待Event对象。Event对象set()办法可以设立Event对象内部信号标志为真;clear()办法可以清除Event对象内部信号标志,将其设立为假;isSet()办法用来判断其内部信号标志状态;wait()办法只有在其内部信号状态为真时将不久地执行并返回,若Event对象内部信号标志为假,wait()办法将始终等待至超时或内部信号状态为真。

第14章数据库编程14.1简朴简介SQLite数据库。答:SQLite是内嵌在Python中轻量级、基于磁盘文献数据库管理系统,不需要服务器进程,支持使用SQL语句来访问数据库。该数据库使用C语言开发,支持大多数SQL91原则,支持原子、一致、独立和持久事务,不支持外键限制;通过数据库级独占性和共享锁定来实现独立事务,当各种线程同步访问同一种数据库并试图写入数据时,每一时刻只有一种线程可以写入数据。SQLite支持2TB大小单个数据库,每个数据库完全存储在单个磁盘文献中,以B+树数据构造形式存储,一种数据库就是一种文献,通过简朴复制即可实现数据库备份。14.2使用Python内置函数dir()查看Cursor对象中办法,并使用内置函数help()查看其用法。答:略。14.3论述使用Python操作Access数据库环节。答:(1)建立数据库连接importwin32com.clientconn=win32com.client.Dispatch(r'ADODB.Connection')DSN='PROVIDER=Microsoft.Jet.OLEDB.4.0。DATASOURCE=C:/MyDB.mdb。'conn.Open(DSN)(2)打开记录集rs=win32com.client.Dispatch(r'ADODB.Recordset')rs_name='MyRecordset'#表名rs.Open('['+rs_name+']',conn,1,3)(3)操作记录集rs.AddNew()rs.Fields.Item(1).Value='data'rs.Update()(4)操作数据conn=win32com.client.Dispatch(r'ADODB.Connection')DSN='PROVIDER=Microsoft.Jet.OLEDB.4.0。DATASOURCE=C:/MyDB.mdb。'sql_statement="InsertINTO[Table_Name]([Field_1],[Field_2])VALUES('data1','data2')"conn.Open(DSN)conn.Execute(sql_statement)conn.Close()(5)遍历记录rs.MoveFirst()count=0while1:ifrs.EOF:breakelse:count=count+1rs.MoveNext()14.4论述使用Python操作MSSQLServer数据库环节。答:可以使用pywin32和pymssql两种不同方式来访问MSSQLServer数据库。先来理解一下pywin32模块访问MSSQLServer数据库环节。(1)添加引用:importadodbapiadodbapi.adodbapi.verbose=False#addsdetailstothesampleprintoutimportadodbapi.ado_constsasadc(2)创立连接:Cfg={'server':'6\\eclexpress','password':'xxxx','db':'pscitemp'}constr=r"Provider=SQLOLEDB.1。InitialCatalog=%s。DataSource=%s。userID=%s。Password=%s。"%(Cfg['db'],Cfg['server'],'sa',Cfg['password'])conn=adodbapi.connect(constr)(3)执行sql语句:cur=conn.cursor()sql='''select*fromsoftextBookwheretitle='{0}'andremark3!='{1}''''.format(bookName,flag)cur.execute(sql)data=cur.fetchall()cur.close()(4)执行存储过程:#假设proName有三个参数,最后一种参数传了nullret=cur.callproc('procName',(parm1,parm2,None))mit()(5)关闭连接conn.close()接下来再通过一种示例来简朴理解一下使用pymssql模块访问MSSQLServer数据库办法。importpymssqlconn=pymssql.connect(host='SQL01',user='user',password='password',database='mydatabase')cur=conn.cursor()cur.execute('CREATETABLEpersons(idINT,nameVARCHAR(100))')cur.executemany("INSERTINTOpersonsVALUES(%d,xinos.king)",[(1,'JohnDoe'),(2,'JaneDoe')])mit()cur.execute('SELECT*FROMpersonsWHEREsalesrep=xinos.king','JohnDoe')row=cur.fetchone()whilerow:print"ID=%d,Name=xinos.king"%(row[0],row[1])row=cur.fetchone()cur.execute("SELECT*FROMpersonsWHEREsalesrepLIKE'J%'")conn.close()14.5论述MySQLDb模块提供数据库访问办法。答:Python访问MySQL数据库可以使用MySQLDb模块,该模块重要办法有:commit():提交事务。rollback():回滚事务。callproc(self,procname,args):用来执行存储过程,接受参数为存储过程名和参数列表,返回值为受影响行数。execute(self,query,args):执行单条sql语句,接受参数为sql语句自身和使用参数列表,返回值为受影响行数。executemany(self,query,args):执行单条sql语句,但是重复执行参数列表里参数,返回值为受影响行数。nextset(self):移动到下一种成果集。fetchall(self):接受所有返回成果行。fetchmany(self,size=None):接受size条返回成果行,如果size值不不大于返回成果行数量,则会返回cursor.arraysize条数据。fetchone(self):返回一条成果行。scroll(self,value,mode='relative'):移动指针到某一行,如果mode='relative',则表达从当前所在行移动value条;如果mode='absolute',则表达从成果集第一行移动value条。

第15章多媒体编程15.1编程程序,在窗口上绘制一种三角形,设立三个顶点为不同颜色,并对内部进行光滑着色。答:fromOpenGL.GLimport*fromOpenGL.GLUTimport*fromOpenGL.GLUimport*importsysclassMyPyOpenGLTest:def__init__(self,width=640,height=480,title='MyPyOpenGLTest'):glutInit(sys.argv)glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH)glutInitWindowSize(width,height)self.window=glutCreateWindow(title)glutDisplayFunc(self.Draw)glutIdleFunc(self.Draw)self.InitGL(width,height)#defaultdrawingfunctiondefDraw(self):glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)glLoadIdentity()glTranslatef(-2.0,0.0,-8.0)#draw2Dgraphic,leavingztobe0glBegin(GL_POLYGON)glColor3f(1.0,0.0,0.0)glVertex3f(0.0,1.0,0.0)glColor3f(0.0,1.0,0.0)glVertex3f(1.0,-1.0,0.0)glColor3f(0.0,0.0,1.0)glVertex3f(-1.0,-1.0,0.0)glEnd()glTranslatef(2.5,0.0,0.0)glutSwapBuffers()defInitGL(self,width,height):glClearColor(0.0,0.0,0.0,0.0)glClearDepth(1.0)glDepthFunc(GL_LESS)glShadeModel(GL_SMOOTH)glEnable(GL_POINT_SMOOTH)glEnable(GL_LINE_SMOOTH)glEnable(GL_POLYGON_SMOOTH)glMatrixMode(GL_PROJECTION)glHint(GL_POINT_SMOOTH_HINT,GL_NICEST)glHint(GL_LINE_SMOOTH_HINT,GL_NICEST)glHint(GL_POLYGON_SMOOTH_HINT,GL_FASTEST)glLoadIdentity()gluPerspective(45.0,float(width)/float(height),0.1,100.0)glMatrixMode(GL_MODELVIEW)defMainLoop(self):glutMainLoop()if__name__=='__main__':w=MyPyOpenGLTest()w.MainLoop()15.2编写程序,读取两幅大小同样图片,然后将两幅图像内容叠加到一幅图像,成果图像中每个像素值为原两幅图像相应位置像素值平均值。答:fromPILimportImageim1=Image.open('d:\\pic1.bmp')im2=Image.open('d:\\pic2.bmp')size=im1.sizeforiinrange(size[0]):forjinrange(size[1]):color1=im1.getpixel((i,j))color2=im2.getpixel((i,j))r=(color1[0]+color2[0])//2g=(color1[1]+color2[1])//2b=(color1[2]+color2[2])//2im1.putpixel((i,j),(r,g,b))im1.save('d:\\pic3.bmp')im1.close()im2.close()15.3编写程序,读取一幅图像内容,将其按象限分为4等份,然后1、3象限内容互换,2、4象限内容互换,生成一幅新图像。答:fromPILimportImageim=Image.open('d:\\pic1.bmp')im2=Image.open('d:\\pic1.bmp')size=im.sizebox1=(0,size[1]/2,size[0]/2,size[1])region1=im.crop(box1)box2=(0,0,size[0]/2,size[1]/2)region2=im.crop(box2)box3=(size[0]/2,0,size[0],size[1]/2)region3=im.crop(box3)box4=(size[0]/2,size[1]/2,size[0],size[1])region4=im.crop(box4)im2.paste(region1,box3)im2.paste(region3,box1)im2.paste(region2,box4)im2.paste(region4,box2)im2.save('d:\\pic4.bmp')im.close()im2.close()15.4结合GUI编程知识,编写一种程序,创立一种窗口并在上面放置两个按钮,分别为“开始播放”和“暂停播放”,将本章15.3节中音乐播放程序进行封装。答:importwximportosimportpygameimportrandomimporttimeimportthreadingclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title='MP3Player',size=(250,150),pos=(350,350))panel=wx.Panel(frame,-1)self.but

温馨提示

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

评论

0/150

提交评论