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

下载本文档

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

文档简介

«Python程序设计》习题与参照答案

第1章基本知识

1.1简朴阐明如何选取对的Python版本。

答:

在选取Python时候,一定要先考虑清晰自己学习Python目是什么,打算做哪方面开发,

有哪些扩展库可用,这些扩展库最高支持哪个版本Python,是Python2.x还是Python3.x,最

高支持到Python276还是Python2.7.9。这些问题都拟定后来,再做出自己选取,这样才干

事半功倍•,而不至于把大量时间挥霍在Pylhon重复安装和卸载上。同步还应当注意,当更新

Python版本推出之后,不要急于更新,而是应当等拟定自己所必要使用扩展库也推出了较新

版本之后再进行更新。

尽管如此,Pylhon3也竟是大势所趋,如果您暂时还没想到要做什么行业领域应用开发,

或者仅仅是为了尝试一种新、好玩语言,那么请亳不踌躇地选取Python3.x系列最高版本

(当前是Python3.4.3)。

1.2为什么说Python采用是基于值内存管理模式?

答:

Pylhon采用是基于值内存管理方式,如果为不同变量赋值相似值,则在内存中只有一份该值,

各种变量指向同一块内存地址,例如下面代码。

»>x=3

»>id(x)

10417624

»>y=3

»>id(y)

10417624

»>y=5

»>id(y)

10417600

»>id(x)

10417624

•1.3在Python中导入模块中对象有哪几种方式?

•答:惯用有三种方式,分别为

•import模块名[as别名]

•from模块名import对象名[as别名]

•frommathimport*

1.4使用pip命令安装numpyxscipy模块。

答:在命令提示符环境卜执行卜面命令:

pipinstallnumpy

pipinstallscipy

1.5编写程序,顾客输入一种三位以上整数,输出其百位以上数字。例如顾客输入1234,

则程序输出12。(提示:使用整除运算。)

答:

1)Python3.4.2代码:

x=input(*Pleaseinputanintegerofmorethan3digits:1)

try:

x=int(x)

x=x//100

ifx==0:

print('Youmustinputanintegerofmorethan3digits.')

else:

print(x)

exceptBaseException:

print('Youmustinputaninteger.')

2)Python2.7.8代码:

importtypes

x=inputfPleaseinputanintegerofmorethan3digits:1)

iftypc(x)!=typcs.IntTypc:

print'Youmustinputaninteger.,

eliflen(str(x))!=4:

print'Youmustinputanintegerofmorethan3digits.,

else:

printx//100

第2章Python数据构造

2.1为什么应尽量从列表尾部进行元素增长与删除操作?

答:

当列表增长或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有

缝隙,但这涉及到列表元素移动,效率较低,应尽量从列表尾部进行元索增长与删除操作以提

高解决速度。

2.2编写程序,生成包括1000个0到100之间随机整数,并记录每个元素浮现次数。

(提示:使用集合。)

答:

1)Python3.4.2代码

importrandom

x=[random.randint(0,100)foriinrange。000)]

d=set(x)

forvind:

print(v,x.count(v))

2)Pylhon2.7.8代码

importrandom

x=[random.randint(0,100)foriinrange(IOOO)]

d=set(x)

forvind:

printv,x.count(v)

2.3编写程序,顾客输入一种列表和2个整数作为下标,然后输出列表中介于2个下标之

间元素构成子列表。例如顾客输入[1,234,5,6]和2,5,程序输出[345,6]。

答:

1)Pylhon3.4.2代码

x=inputCTIeaseinputalist:')

x=eval(x)

start,end=cval(input('Plcascinputthestartpositionandtheendposition:'))

print(x[start:end])

2)Pylhon2.7.8代码

x=input(*Pleaseinputalist:')

start,end=input('Plcascinputthestartpositionandtheendposition:*)

printx[start:end]

2.4设计一种字典,并编写程序,顾客输入内容作为键,然后输出字典中相应值,如果顾客

输入键不存在,则输出“您输入键不存在!”

答:

1)Python3.4.2代码

d={l:'a,,2:'b',3:'c',4:'d')

v=input(*Plcascinputakey:')

v-eval(v)

print(d.get(v;您输入键不存在))

2)Python2.7.8代码

d={l:'a;2:*b;3:fc',4:'d'}

v=inpu(('Pleaseinputakey:')

print(d.get(v,'您输入键不存在,))

2.5编写程序,生成包括20个随机数列表,然后将前10个元素升序排列,后10个元素降

序排列,并输出成果。

答:

1)Python3.4.2代码

importrandom

x=[random.randint(0,100)foriinrange(20)]

print(x)

y=xf0:10]

y.sort()

x[0:l0]=y

y=x[10:20]

y.sort(reverse=True)

x[10:20]=y

print(x)

2)Python2.7.8代码

importrandom

x=Irandom.randint((),100)foriinrange(20)J

printx

y=x[0:10]

y.sort()

x[0:101=y

y=xl10:20]

y.sort(reverse=True)

x[10:20]=y

printx

2.6在Python中,字典和集合都是用一对大括号作为定界符,字典每个元素有两某些

构成,即键和值,其中键不容许重复。

2.7假设有列表a=「name','age','sex,]和b=['Dong',38,'Male'],请使用一种语句将这两个

列表内容转换为字典,并且以列表a中元素为键,以列表b中元素为值,这个语句可以写为c

=dict(zip(a,b))o

2.8假设有一种列表a,现规定从列表a中卷3个元素取1个,并旦将取到元素构成新列表b,

可以使用语句b=a[::3]o

2.9使用列表推导式生成包括10个数字5列表,语句可以写为[5foriinranged0)]o

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('Plcascinputanintegerof4digitsmeaningtheyear:')

x=eval(x)

ifx%400==0or(x%4==0andnotx%100==0):

print('Yes')

else:

print('No')

2)Python2.7.8代码

x=input(*Pleaseinputanintegerof4digitsmeaningtheyear:1)

ifx%400==0or(x%4==0andnotx%100==0):

print'Yes,

else:

print'No'

3.3编写程序,生成一种包括50个随机整数列表,然后删除其中所有奇数。(提示:从后

向前删。)

答:

1)Python3.4.2代码

importrandom

x=[random.randint(0,1(X))foriinrange(5())]

print(x)

i=len(x)-l

whilei>=0:

ifx[il%2==l:

delx[i]

i-=l

print(x)

2)Python2.7.8代码

把上面代码中第三行和最后一行改为printx即可。

34编写程序,生成一种包括20个随机整数列表,然后对其中偶数下标元素进行降序排

列,奇数下标元素不变。[提示:使用切片。)

答:

1)Python3.4.2代码

importrandom

x=[random.randint(0.100)foriinrange(20)]

print(x)

y=x[::2]

y.sort(reverse=True)

x[::2]=y

print(x)

2)Python2.7.8代码

把上面代码中第三行和最后一行改为printx即可。

35编写程序,顾客从键盘输入不大于1000整数,对其进行因式分解。例如,10=2X5,

60=2X2X3X5。

父口・•

1)Python3.4.2代码

x=input('Pleaseinputanintegerlessthan1000:')

x=eval('x')

t=x

i=2

result=[]

whileTrue:

ift==l:

break

ift%i==O:

result.appcnd(i)

t=(/i

else:

i+=l

Printx,'=','*'.join(map(str,result))

2)Python27g代码

x=input('Pleaseinputanintegerlessthan1000:')

t=x

i=2

result=[]

whileTrue:

ift==l:

break

ift%i==O:

result.append(i)

t=t/i

else:

i+=l

printx,'=','*'.join(map(slr,result))

3.6编写程序,至少使用2种不同办法计算100以内所有奇数和。

答:Python3.4.2代码如下,如果使用Python2.7.8只需要把其中print。函数改为print语句即

可。

x=[iforiinrange(UOO)ifi%2==1]

print(sum(x))

print(sum(range(1,100)1::2]))

3.7编写程序,实y

现分段函数计算,

如下表所示。

X

x<00

0<=x<5X

5<=x<103x-5

10<=x<200.5x-2

20<=x0

答:Python3.4.2代码如下,如果使用Python2.7.8只需要把其中print。函数改为print语句即

可。

x=input('Pleaseinputx:')

x=cval(x)

ifx<0orx>=20:

print(O)

elif()<=x<5:

print(x)

clif5<=x<10:

print(3*x-5)

elif10<=x<20:

print(O.5*x-2)

第4章字符串与正则表达式

4.1假设有一段英文,其中有单独字母“I”误写为“i”,请编写程序进行纠正。

答:这里给出Python3.4.2代码,如果使用Python278话只需要修改其中print。函数为

print语句即可。

1)不使用正则表达式

x="iamateacherjamman,andiam38yearsold.Iamnotabusinessman."

x=x.replace('i\'I')

x=x.replaceCiI')

print(x)

2)使用正则表达式

x="iamateacherjainman,andiam38yearsold.Iamnotabusinessman."

importre

pattern=pile(r'(?:[A\w]|\b)i(?:[A\wj),)

whileTrue:

result=pattern.search(x)

ifresult:

ifresult.start(O)!=0:

x=x[:result.start(O)+l]+'r+x[result.end(O)-l:]

else:

x=x[:result.start(0)]+'I'4-x[result.end(0)-1:]

else:

break

print(x)

4.2假设有一段英文,其中有单词中间字母“i”误写为“I”,请编写程序进行纠正,

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可。

importre

x="Iamateacher,!amman,andIam38yearsold.Iamnotabusinessman."

print(x)

pattern=pile(r'(?:[\w])I(?:[\w])')

whileTrue:

result=pattern.search(x)

ifresult:

ifresult.start(O)!=0:

x=x[:rcsult.start(O)+l]+*i'+x[d(O)-l:]

else:

x=x[:result.start(O)J+'i'+x[result.end(O)-1:]

else:

break

print(x)

4.3有一段英文文本,其中有单词持续重复了2次,编写程序检查重复单词并只保存一

种o例如文本内容为“Thisisisadesk.",程序输出为“Thisisadesk.”

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为

print语句即可。

1)办法一

importre

x='Thisisaadesk.'

pattern=pile(r'\b(\w4-)(\s+\l){1,}\b')

matchResult=pattern.search(x)

x=pattern.sub(matchResult.group(1),x)

print(x)

2)办法二

x='Thisisaadesk.'

pattern=re.conipile(r'(?P<f>\b\w+\b)\s(?P=f)')

matchResult=pattern.search(x)

x=x.replace(matchResult.group(0),matchResult.group(I))

4.4简朴解释Python字符串驻留机制。

答:

Python支持字符串驻留机制,即:对于短字符串,将其赋福给各种不同对象时,内存中只有一

种副本,各种对象共享该副本。这一点不合川于长字符串,即氏字符串不遵守驻留机制,下面

代码演示了短字符串和长字符串在这方面区别。

>»a='1234'

>»b='l234'

»>id(a)==id(b)

True

»>a='i234'*50

>»b='1234'*50

»>id(a)==id(b)

False

4.5编写程序,顾客输入一段英文,然后输出这段英文中所有长度为3个字母单词。

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可。

importrc

x=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

语句即可。

importmath

defIsPrime(v):

n=int(math.sqrt(v)+l)

foriinrange(2,n):

ifv%i==0:

return'No'

else:

return'Yes'

print(IsPrime(37))

print(IsPrime(60))

print(IsPrime(l13))

5.3编写函数,接受一种字符串,分别记录大写字母、小写字母、数字、其她字符个数,

并以元组形式返回成果。

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可。

defdemo(v):

capital=little=digit=o:hcr=0

foriinv:

if'A'<=i<='Z':

capital+=l

elif'a'<=i<-z':

little+=l

elif'0'<=i<='9':

digit+=l

else:

other+=1

return(capital,little,digit,other)

x='capital=little=digit=other=0'

print(demo(x))

5.4在Python程序中,局部变量会隐藏同名全局变量吗?请编写代码进行验证。

答案:会。

»>defdemo():

a=3

printa

»>a=5

»>demo()

3

»>a

5

5.5编写函数,可以接受任意各种整数并输出其中最大值和所有整数之和。

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可,

defdemo(*v):

print(v)

prinl(max(v))

print(sum(v))

demo(1,2,3)

demo(l,2,3,4)

demo(l,2,3,4,5)

5.6编写函数,模仿内置函数sum()。

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可。

defSum(v):

s=0

foriinv:

s+=i

returns

x=[1,2,3,4,5]

print(Sum(x))

x二(123,4,5)

print(Sum(x))

5.7编写函数,模仿内置函数sorted。。

答:这里给出Python3.4.2代码,如果使用Python2.7.8话只需要修改其中print。函数为print

语句即可o

defSor(ed(v):

t=v[::]

r=[]

whilet:

tt=min(t)

r.append(tt)

t.remove(tt)

returnr

x=[1,3,5,24,0,9,7]

print(x)

prini(Sorted(x))

第6章面向对象程序设计

6.1继承6.5节例2中Person类生成Student类,填写新函数用来设立学生专业,然后生

成该类对象并显示信息。

答:Python3.4.2代码为

importtypes

classPerson(object):#基类必要继承于object,否则在派生类中将无法使用super。函数

def—init_(self,name=",age=20,sex='man'):

self.setName(narne)

self,setAge(age)

self.setSex(sex)

defselName(self,name):

ifnotisinstance(name,str):

print('namemustbestring.')

return

self.—name=name

defsetAge(self,age):

ifnotisinstance():

print('agemustbeinteger.')

return

self.—age=age

defsetSex(self,sex):

ifsex!='man'andsex!='woman':

print('scxmustbe"man"or"woman"')

return

self.—sex=sex

defshow(self):

print(self.—name)

print(self._age)

print(self._sex)

classStudent(Person):

def_init_(self,name=',age=30,sex='man',major=Computer'):

#调用基类构造办法初始化基类私有数据成员

supcr(Studcnt,self).—init_(name,age,sex)

seif.setMajor(major)#初始化派生类数据成员

defsetMajor(self,m可or):

ifnotisinstance(major,str):

print('majormustbeastring.*)

return

self._major=major

defshow(self):

super(Student,self).show()

prinl(self._major)

if—name-==*_main—

zhangsan=Person('ZhangSan',19,'man')

zhangsan.show()

lisi=Studcnt('LiSi',32,'man;'Math')

lisi.show()

6.2设计一种三维向量类,并实现向量加法、减法以及向量与标量乘法和除法运算。

答:Python3.4.2代码如下

classVcctcr3:

def_init_(self,x=0,y=0,z=0):

self.X=x

self.Y=y

self.Z=z

def_add_(self,n):

r=Vecter3()

r.X=self.X+n.X

r.Y=self.Y+n.Y

r.Z=self.Z+n.Z

returnr

def—sub_(self,n):

r=Vecter3()

r.X=self.X-n.X

r.Y=self.Y-n.Y

r.Z=self.Z-n.Z

returnr

def_mul_(self,n):

r=Vecter3()

r.X=self.X*n

r.Y=self.Y*n

r.Z=self.Z*n

returnr

def_truediv_(self,n):

r=Vecter3()

r.X=self.X/n

r.Y=self.Y/n

r.Z=self.Z/n

returnr

def_floordiv_(self,n):

r=Vecter3()

r.X=self.X//n

r.Y=self.Y//n

r.Z=self.Z//n

returnr

defshow(self):

print((self.X,self.Y,self.Z))

vI=Vecter3(1,2,3)

v2=Vecter3(4,5,6)

v3=v1+v2

v3.show()

v4=v1-v2

v4.show()

v5=vl*3

v5.show()

v6=v1/2

v6.show()

6.3面向对象程序设计三要素分别为封装、继承和多态。

6.4简朴解释Python中如下划线开头变量名特点。

答:

•在Python中,如下划线开头变量名有特殊含义,特别是在类定义中。用下划线作为

变量前缀和后缀来表达类特殊成员:

•_xxx:这样对象叫做保护变量,不能用'frommoduleimport*'导入,只有类对象和子

类对象能访问这些变量;

XXX—:系统定义特殊成员名字:

_xxx:类中私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外

部可以通过“对象名•一类名_xxx”这样特殊方式来访问。Python中没有纯粹C++意义上私

有成员。

6.5与运算符“**”相应特殊办法名为_pow_(),与运算符“〃”相应特殊办法名为

_floordiv_()o

第7章文献操作

7.1假设有一种英文文本文献,编写程序读取其内容,并将其中大写字母变为小写字母,

小写字母变为大写字母。

答:

f=opcn(r'd:\l.txf,'r')

s=f.readlines()

f.close()

r=[i.swapcaseOforiins]

f=open(r'd:\2.lxr,'w')

f.writelincs(r)

f.close()

7.2编写程序,将包括学生成绩字典保存为二进制文觥,然后再读取内容并显示,

答:Python3.4.2代码

importpickle

d=1张三,:98,'李四':90,'王五FOO)

print(d)

f=opcn('scorc.dat','wb')

pickle.dump(l,f)

pickle.dump(d,f)

f.close

f=opcnCscore.dat',W)

pickle.load(f)

d=pickle.load(f)

f.close()

print(d)

7.3使用shutil模块中move。办法进行文献移动。

答:

importshutil

»>shutil.movc(r'd:\l.txt',r'e:\l.txt')

'e:\\l.txf

7.4简朴解释文本文献与二进制文献区别。

答:

(1)文本文献

文本文献存储是常规字符串,由若干文本行构成,普通每行以换行符5结尾。常规字符

串是指记事本或其她文本编辑器能正常显示、编辑并且人类可以直接阅读和理解字符串,如

英文字母、中文、数字字符串。文本文献可以使用字解决软件如gedit、记事本进行编责。

(2)二进制文献

二进制文献把对象内容以字节串(bytes)进行存储,无法用记事本或其她普通字解决软件

直接进行编辑,普通也无法被人类直接阅读和理解,需要使用专门软件进行解码后读取、显

示、修改或执行。常用如图形图像文献、音视频文献、可执行文献、资源文献、各种数据

库文献、各类office文档等都属于二进制文献。

7.5编写代码,将当前工作目录修改为“c:\”,井验证,最后将当前工作目录恢狂为本来目

录。

答:

»>importos

»>os.getcwd()

,C:\\Python341

»>os.chdir(r'c:W)

»>os.getcwd()

'c:\V

»>os.chdir(r'c:\Python34'»

»>os.getcwd()

'c:\\Python34'

7.6编写程序,顾客输入一种Fl录和一种文献名,搜索该目录及其子目录中与否存在该文

献。

答:

1)Python3.4.2代码

importsys

importos

directory=sys.argv[I]

filename=sys.argv[2]

paths=os.walk(directory)

forroot,dirs,filesinpaths:

iffilenameinfiles:

print('Ycs')

break

else:

print('No')

2)Py【hon2.7.8代码

importsys

importos

directory=sys.argv[I]

filename=sys.argv[2]

paths=os.walk(directory)

forroot,dirs,filesinpaths:

iffilenameinfiles:

print'Yes'

break

else:

print'No'

第8章异常解决构造与程序调试

8.1Python异常解决构造有哪几种形式?

答:

比较惯用形式有:

1)原则异常解决构造

try:

try块#被监控语句,也许会引起异常

exceptException!,reason]:

except块#解决异常代码

如果需要捕获所有异常时.可以使用BaseException,代码格式如下:

try:

exceptBaseException,e:

except块#解决所有错误

上面构造可以捕获所有异常,尽管这样做很安全,但是普通并不建议这样做。对于异常

解决构造,普通建议是尽量显式捕获也许会浮现异常并且有针对性地编写代码进行解决,由

于在实际应用开发中,很难使用同一段代码去解决所有类型异常。固然,为了避免漏掉没有

得到解决异常干扰程序正常执行\在捕获了所有也许想到异常之后,您也可以使用异常解决

构造最后一种excep【来捕获BaseExc叩lion。

2)此外一种惯用异常解决构造是iry...except...else...语句。

3)在实际开发中,同一段代码也许会抛出各种异常,需要针对不同异常类型进行相应解决。

为了支持各种异常捕获和解决,Python提供了带有各种except异常解决构造,此类似于多分

支选取构造,一旦某个except捕获了异常,则背面剩余except子句将不会再执行。语法为:

try:

try块#被监控语句

exceptException1:

excepi块I#解决异常I语句

exceptException?:

except块2#解决异常2语句

4)将要捕获异常写在一种元组中,可以使用一种except语句捕获各种异常,并且共用

同一段异常解决代码,固然,除非拟定要捕获各种异常可以使用同一段代码来解决,并不建议

这样做。

5)最后一种惯用异常解决构造是try…except...finally...构造。在该构造中,finally子句中内存

无论与否发生异常都会执行,惯用来做某些清理工作以释放iry子句中申请资源。语法如

下:

try:

finally:

......#无论如何都会执行代码

8.2异常和错误有什么区别?

答:

异常是指由于程序执行过程中出错而在正常控制流以外采用行为。严格来说,语法错误

和逻辑错误不属于异常,但有些语法错误往往会导致异营,例如由于大小写拼写错误而访问

不存在对象,或者试图访问不存在文献,等等。

8.3使用pdb模块进行Python程序调试重要有哪几种用法?

答:重要有三种方式.

1)在交互模式下使用pdb模块提供功能可以直接调试语句块、表达式、函数等各种脚

本。

2)在程序中嵌入断点来实现调试功能

在程序中一方面导入pdb模块,然后使用pdb.set」race()在需要位置设立断点。如果程

序中存在通过该办法调用显式插入断点,那么在命令提示符环境下执行该程序或双击执行程

序时将自动打开pdb调试环境,虽然该程序当前不处在遍试状态。

3)使用命令行调试程序

在命令行提示符下执行“python-mpdb脚本文献名”,则直接进入调试环境:当调试

结束或程序正常结束后来.pdb将重启该程序。

8.4Python内建异常类基类是BaseException。

8.5断言语句语法为assert.

8.6Python上下文管理语句是with。

第9章GUI编程

9.1设计一种窗体,并放置一种按钮,单击按钮后弹出颜色对话框,关闭颜色对话框后提

示选中颜色。

答:Python2.7.8代码如下,

importwx

classwxGUI(wx.App):

defOnlnit(scif):

frame=wx.Frame(parent=None,title-wxGUI',size=(160,140))

panel=wx.Panel(frame,-1)

buttonOK=wx.Buttor(panel.-1.'OK',pos=(0,0))

self.Bind(wx.EVT_BUTTON,self.OnButlonOK,buttonOK)

frame.Show()

returnTrue

defOnButtonOK(self,event):

colorDIg=wx.ColourDialog(None)

colorDlg.ShowModal()

color=colorDlg.GetColourData().Colour

wx.MessagcBox(str(cclor))

app=wxGUI()

app.MainLoopO

9.2设计一种窗体,并放置一种按钮,按钮默认文本为“开始”,单击按钮后文本变为

“结束”,再次单击后变为“开始”,循环切换。

答:Python2.7.8代码如下,

importwx

classwxGUI(wx.App):

defOnlnit(self):

frame=wx.Frame(parent=None,title-wxGUr,size=(160J40))

panel=wx.Pancl(frame,-1)

self.bultonOK=wx.Bu(ton(panel,-I,'Start*,pos=(0,0))

self.Bind(wx.EVT_BLTTON,self.OnButtonOK,self.bultonOK)

frame.Show()

returnTrue

defOnBut(onOK(self,event):

text=sclf.buttonOK.GctLabclTcxt()

iftext=='Start':

self.buttonOK.SetLabelTextCEnd')

cliftext=='End':

self.but(onOK.SetL£belText('Start')

app=wxGUI()

app.MainLoopO

9.3设计一种窗体,模仿QQ登录界面,当顾客输入号码123456和密码654321时提示对

的,否则提示错误。

答:Python2.7.8代码如下,

importwx

classwxGUI(wx.App):

defOnlnit(sclf):

frame=wx.Frame(parent=None,title='Login',size=(250,l50),pos=(350,350))

panel=wx.Panel(frame,-1)

label1=wx.StaticTextipanel,-1,'UserName:\pos=(0J0),style=wx.ALIGN_RIGHT)

labe!2=wx.Sta(icText(panel,-1,'Password:',pos=(0,30),slyle=wx.ALIGN_RIGHT)

self.textName=wx.TextCtrl(panel,-1,pos=(70J0),size=(160,20))

self.textPwd=wx.TextCtrl(panel,-Lpos=(70,30),size=(160,20),style=wx.TE_PASSWORD)

buttonOK=wx.Buttor(paneL-1,'OK',pos=(30,60))

self.Bind(wx.EVT_BLTTON,self.OnButtonOK,buttonOK)

buttonCancel=wx.Bu:ton(panel,-1,'Cancel',pos=(120,60))

self.Bind(wx.EVT_BLTTON,sclf.OnButtonCanccl,buttonCancel)

buttonOK.Se(Defaul(()

frame.Show()

returnTrue

defOnButtonOK(sclf,event):

usrName=self.textName.GetValue()

usrPvvd=self.textPwd.GetValue。

ifusrName=='173456'andnsrPwd=="6543?1

wx.MessageBox('Right')

else:

wx.MessageBox('Wrong')

defOnButtonCanccl(sclf,event):

pass

app=wxGUI()

app.MainLoopO

第10章网络程序设计

10.1简朴解释TCP和UDP合同区别。

答:

TCP合同是面向连接、具备质量保证可靠传播合同,但开销较大;UDP合同是尽最大

能力传播无连接合同,开销小,惯用于视频在线点播(VideoOnDemand,VOD)之类应用。

TCP合同和UDP合同并没有优劣之分,仅仅是合用场合有所不同。

10.2同窗之间合伙编写UDP通信程序,分别编写发送端和接受端代码,发送端发送一种

字符串“HellowoHd!”。假设接受端在计算机5000端口进行接受,并显示接受内容。

答:一方面使用ipconfig/all命令查看本机IP地址,然后分别编写下面代码,并将其中IP地

址替代为相应IP地址。

接受端代码:

importsocket

s=socket.socket(socket.AF_INET,sockel.SOCK_DGRAM)

s.bind(("",5000))#空字符串表达本机任何可用IP地址

data,addr=s.recvfrom(1024)#缓冲区大小为1024字节

print*receivedmessage:%s,%data#显示接受到内容

s.close()

发送端代码:

importsocket

s=sockct.sockci(sockct.AF_lNET,sockct.SOCK_DGRAM)

s.sendlo("Hello,world!",C48",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编写脚本,运营后

在网页上显示wHelloworld!wo

答:核心代码为

print

print'Status:200OK'

print*Contcnt-typc:tcxt/htmi'

print

print,<HTML><HEAD><TITLE>PythonSampleCGI</TITLE></HEAD>'

print'<BODY>'

print*<Hl>Thisisaheader</Hl>>

print'<p>Helloworld!'

print'<br>'

print'</BODY>'

第11章大数据解决

11.1简朴简介常用大数据解决框架。

•答:重要有三种,

•MapReduce:分布式计算框架,可以将单个大型计算作业分派给多台计算机执行,可

以在短时间内完毕大量工作,特别适合数值型和标称型数据,但需要对行业领域具备一

定理解后重写算法来完毕特定业务解决规定。MapReduce名字由函数式编程中惯用

map和reduce两个单词构成。MapReduce在大量节点构成集群上运营,工作流程是:单

个作业被提成诸多小份,输入数据也被切片并分发到每个节点,每个节点只在本地数据

上做运算,相应运算代码称为nipper,这个过程即m叩阶段;每个m叩per输出通过某

种方式组合,依照需要也许再进行重新排序,排序后成果再被切提成小份并分发到各个

节点进行下一步解决这个过程被称为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.systemCcalc.exe')

第二种办法:

»>importos

»>os.popen('calc.exe')

第三种办法:

»>importos

»>os.startfile('calc.exe')

第四种办法:

»>importwin32api

»>win32api.ShellExecute(0,'open1,^alc.exe',",1)

第五种办法:

»>importwin32process

»>handle=win32process.CieateProcess(r'c:\windows\system32\calc.exe',,\None,None,。,

win32process.CREATE_NO_WINDOW,None,None,win32process.STARTUPINFO())

124编写代码,检测您所使用操作系统版本。

答:略,请参照12.5节,

第13章多线程编程

13.1简朴论述创立线程办法。

答:

Thread类支持使用两种办法来创立线程,一种是为构造函数传递一种可调用对象,另一

种是继承Thread类并在派生类中重写_init_()和run()办法。创立了线程对象后来,可以调

用其start。办法来启动,该办法自动调用该类对象run()办法,此时该线程处在alive状态.直

至线程nm()办法运营结束。

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种线程同步办法。

⑴答:

(2)使用Condition对象可以在某些事件触发后才解决数据,可以用于不同线程之间通

信或告知,以实现更高档另J同步。Condition对象除了具备acquire。和release。办法之外,尚

有wait。、notify。、notify_all()等办法。下面通过典型生产者/消费者问题来演示Condition

对象用法。

Queue模块(在Python3中为queue模块)实现了多生产者/多消费者队列,特别适合需要在

各种线程之间进行信息互换场合,该模块Queue对象实现/多线程编程所需要所有锁语

义。

Event对象是一种简朴线程通信技术,一种线程设立Eveni对象,另一种线程等待Evenl对

象。Event对象set。办法可以设立Event对象内部信号标志为真;clear。办法可以清除Event

对象内部信号标志,将其设立为假;isSet。办法用来判断其内部信号标志状态;wait。办法只

有在其内部信号状态为真时将不久地执行并返I可,若Evem对象内部信号标志为假,wail()办

法将始终等待至超时或内部信号状态为真。

第14章数据库编程

14.1简朴简介SQLite数据库。

答:

SQLile是内嵌在Python中轻量级、基于磁盘文献数据库管理系统,不需要服务器进程,

支持使用SQL语句来访向数据库。该数据库使用C语言开发,支持大多数SQL91原则、支

持原子、一致、独立和持久事务,不支持外键限制;通过数据库级独占性和共享锁定来实现

独立事务,当各种线程同步访问同一种数据库并试图写入数据时,每一时刻只有一种线程可

以写入数据。SQLite支持2TB大小单个数据库,每个数据库完全存储在单个磁盘文献也以

B+树数据构造形式存储,一种数据库就是一种文献,通过简朴复制即可实现数据库备份。

14.2使用Python内置函数dir()查看Cursor对象中办法,并使用内置函数help。查看其

用法。

答:略。

14.3论述使用Python操作Access数据库环节。

答:

(1)建立数据库连接

importwin32com.clienl

conn=win32com.client.Dispatch(r'ADODB.Connection')

1

DSN='PROVIDER=Microsoft.Jet.OLEDB.4.()oDATASOURCE=C:/MyDB.mdbo

conn.Open(DSN)

(2)打开记录集

rs=win32com.client.Dispatch(r'ADODB.Recordset')

rs_naine='MyRecordset'#表名

rs.Open('['+rs_name-conn,1,3)

(3)操作记录集

rs.AddNew()

rs.Fields.Itern(I).Value='data'

rs.Update()

(4)操作数据

conn=win32com.client.Dispatch(r'ADODB.Connection')

1

DSN='PROVIDER=Microsoft.Jet.OLEDB.4

温馨提示

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

评论

0/150

提交评论