Python程序设计基础习题答案与分析.docx
《Python程序设计基础习题答案与分析.docx》由会员分享,可在线阅读,更多相关《Python程序设计基础习题答案与分析.docx(16页珍藏版)》请在冰豆网上搜索。
Python程序设计基础习题答案与分析
《Python程序设计基础》习题答案与分析(总16页)
Python程序设计基础
习题答案与分析
程昱
第1章基础知识
简单说明如何选择正确的Python版本。
答:
在选择Python的时候,一定要先考虑清楚自己学习Python的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的Python,是Python还是Python,最高支持到Python还是Python。
这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间浪费在Python的反复安装和卸载上。
同时还应该注意,当更新的Python版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进行更新。
尽管如此,Python3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择Python系列的最高版本(目前是Python)。
为什么说Python采用的是基于值的内存管理模式
Python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码。
>>>x=3
>>>id(x)
>>>y=3
>>>id(y)
>>>y=5
>>>id(y)
>>>id(x)
>>>x=[1,2,3,1,1,2]
>>>id(x[0])==id(x[3])==id(x[4])
True
解释Python中的运算符“/”和“else:
print(x)
exceptBaseException:
print('Youmustinputaninteger.')
2)Python代码:
importtypes
x=input('Pleaseinputanintegerofmorethan3digits:
')
iftype(x)!
=:
print'Youmustinputaninteger.'
eliflen(str(x))!
=4:
print'Youmustinputanintegerofmorethan3digits.'
else:
printx......(map(str,result)))
2)Python代码
x=input('Pleaseinputanintegerlessthan1000:
')
t=x
i=2
result=[]
whileTrue:
ift==1:
break
ift%i==0:
(i)
t=t/i
else:
i+=1
printx,'=','*'.join(map(str,result))
编写程序,至少使用2种不同的方法计算100以内所有奇数的和。
答:
Python代码如下,如果使用Python只需要把其中的print()函数改为print语句即可。
x=[iforiinrange(1,100)ifi%2==1]
print(sum(x))
print(sum(range(1,100)[:
:
2]))
编写程序,输出所有由1、2、3、4这四个数字组成的素数,并且在每个素数中每个数字只使用一次。
答:
Python代码如下,
答:
Python代码如下,如果使用Python只需要把其中的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*x-2)
编写程序,实现分段函数计算,如下表所示。
x
y
x<0
0
0<=x<5
x
5<=x<10
3x-5
10<=x<20
20<=x
0
答:
Python代码如下,如果使用Python只需要把其中的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*x-2)
第4章字符串与正则表达式
假设有一段英文,其中有单独的字母“I”误写为“i”,请编写程序进行纠正。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
1)不使用正则表达式
x="iamateacher,iamman,andiam38yearsamnotabusinessman."
x=('i','I')
x=('i','I')
print(x)
2)使用正则表达式
x="iamateacher,iamman,andiam38yearsamnotabusinessman."
importre
pattern=(r'(:
[^\w]|\b)i(:
[^\w])')
whileTrue:
result=(x)
ifresult:
if(0)!
=0:
x=x[:
(0)+1]+'I'+x[(0)-1:
]
else:
x=x[:
(0)]+'I'+x[(0)-1:
]
else:
break
print(x)
假设有一段英文,其中有单词中间的字母“i”误写为“I”,请编写程序进行纠正。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
importre
x="Iamateacher,Iamman,andIam38yearsamnotabusInessman."
print(x)
pattern=(r'(:
[\w])I(:
[\w])')
whileTrue:
result=(x)
ifresult:
if(0)!
=0:
x=x[:
(0)+1]+'i'+x[(0)-1:
]
else:
x=x[:
(0)]+'i'+x[(0)-1:
]
else:
break
print(x)
有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一个。
例如文本内容为“Thisisisadesk.”,程序输出为“Thisisadesk.”
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
1)方法一
importre
x='Thisisaadesk.'
pattern=(r'\b(\w+)(\s+\1){1,}\b')
matchResult=(x)
x=
(1),x)
print(x)
2)方法二
x='Thisisaadesk.'
pattern=(r'(P\b\w+\b)\s(P=f)')
matchResult=(x)
x=(0),
(1))
简单解释Python的字符串驻留机制。
答:
Python支持字符串驻留机制,即:
对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。
这一点不适用于长字符串,即长字符串不遵守驻留机制,下面的代码演示了短字符串和长字符串在这方面的区别。
>>>a='1234'
>>>b='1234'
>>>id(a)==id(b)
True
>>>a='1234'*50
>>>b='1234'*50
>>>id(a)==id(b)
False
编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
importre
x=input('Pleaseinputastring:
')
pattern=(r'\b[a-zA-Z]{3}\b')
print(x))
第5章函数设计与使用
运行小节最后的示例代码,查看结果并分析原因。
答:
原因是对于函数的默认值参数只会被处理一次,下次再调用函数并且不为默认值参数赋值时会继续使用上一次的结果,对于列表这样的结构,如果调用函数时为默认值参数的列表插入或删除了元素,将会得到保留,从而影响下一次调用。
编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
importmath
defIsPrime(v):
n=int(v)+1)
foriinrange(2,n):
ifv%i==0:
return'No'
else:
return'Yes'
print(IsPrime(37))
print(IsPrime(60))
print(IsPrime(113))
编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
defdemo(v):
capital=little=digit=other=0
foriinv:
if'A'<=i<='Z':
capital+=1
elif'a'<=i<='z':
little+=1
elif'0'<=i<='9':
digit+=1
else:
other+=1
return(capital,little,digit,other)
x='capital=little=digit=other=0'
print(demo(x))
在函数内部可以通过关键字global来定义全局变量。
如果函数中没有return语句或者return语句不带任何返回值,那么该函数的返回值为None。
调用带有默认值参数的函数时,不能为默认值参数传递任何值,必须使用函数定义时设置的默认值。
(对、错)
在Python程序中,局部变量会隐藏同名的全局变量吗请编写代码进行验证。
答案:
会。
>>>defdemo():
a=3
printa
>>>a=5
>>>demo()
3
>>>a
5
lambda表达式只能用来创建匿名函数,不能为这样的函数起名字。
(对、错)
编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的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)
编写函数,模拟内置函数sum()。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
defSum(v):
s=0
foriinv:
s+=i
returns
x=[1,2,3,4,5]
print(Sum(x))
x=(1,2,3,4,5)
print(Sum(x))
包含yield语句的函数可以用来创建生成器。
编写函数,模拟内置函数sorted()。
答:
这里给出Python代码,如果使用Python的话只需要修改其中的print()函数为print语句即可。
defSorted(v):
t=v[:
:
]
r=[]
whilet:
tt=min(t)
(tt)
(tt)
returnr
x=[1,3,5,2,1,0,9,7]
print(x)
print(Sorted(x))
第6章面向对象程序设计
继承节例2中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。
答:
Python代码为
importtypes
classPerson(object):
#基类必须继承于object,否则在派生类中将无法使用super()函数
def__init__(self,name='',age=20,sex='man'):
(name)
(age)
(sex)
defsetName(self,name):
ifnotisinstance(name,str):
print('namemustbestring.')
return
=name
defsetAge(self,age):
ifnotisinstance(age,int):
print('agemustbeinteger.')
return
=age
defsetSex(self,sex):
ifsex!
='man'andsex!
='woman':
print('sexmustbe"man"or"woman"')
return
=sex
defshow(self):
print
print
print
classStudent(Person):
def__init__(self,name='',age=30,sex='man',major='Computer'):
#调用基类构造方法初始化基类的私有数据成员
super(Student,self).__init__(name,age,sex)
(major)#初始化派生类的数据成员
defsetMajor(self,major):
ifnotisinstance(major,str):
print('majormustbeastring.')
return
=major
defshow(self):
super(Student,self).show()
print
if__name__=='__main__':
zhangsan=Person('ZhangSan',19,'man')
()
lisi=Student('LiSi',32,'man','Math')
()
设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。
答:
Python代码如下
classVecter3:
def__init__(self,x=0,y=0,z=0):
=x
=y
=z
def__add__(self,n):
r=Vecter3()
=+
=+
=+
returnr
def__sub__(self,n):
r=Vecter3()
=-
=-
=-
returnr
def__mul__(self,n):
r=Vecter3()
=*n
=*n
=*n
returnr
def__truediv__(self,n):
r=Vecter3()
=/n
=/n
=/n
returnr
def__floordiv__(self,n):
r=Vecter3()
=类名__xxx”这样的特殊方式来访问。
Python中没有纯粹的C++意义上的私有成员。
与运算符“**”对应的特殊方法名为__pow__(),与运算符“.语句。
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:
......#无论如何都会执行的代码
异常和错误有什么区别
答:
异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。
严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。
使用pdb模块进行Python程序调试主要有哪几种用法
答:
主要有三种方式,
1)在交互模式下使用pdb模块提供的功能可以直接调试语句块、表达式、函数等多种脚本。
2)在程序中嵌入断点来实现调试功能
在程序中首先导入pdb模块,然后使用()在需要的位置设置断点。
如果程序中存在通过该方法调用显式插入的断点,那么在命令提示符环境下执行该程序或双击执行程序时将自动打开pdb调试环境,即使该程序当前不处于调试状态。
3)使用命令行调试程序
在命令行提示符下执行“python–mpdb脚本文件名”,则直接进入调试环境;当调试结束或程序正常结束以后,pdb将重启该程序。
Python内建异常类的基类是BaseException。
断言语句的语法为assert。
Python上下文管理语句是with。
第9章GUI编程
设计一个窗体,并放置一个按钮,单击按钮后弹出颜色对话框,关闭颜色对话框后提示选中的颜色。
答:
Python代码如下,
importwx
classwxGUI:
defOnInit(self):
frame=(parent=None,title='wxGUI',size=(160,140))
panel=(frame,-1)
buttonOK=(panel,-1,'OK',pos=(0,0))
,buttonOK)
()
returnTrue
defOnButtonOK(self,event):
colorDlg=(None)
()
color=().Colour
(str(color))
app=wxGUI()
()
设计一个窗体,并放置一个按钮,按钮默认文本为“开始”,单击按钮后文本变为“结束”,再次单击后变为“开始”,循环切换。
答:
Python代码如下,
importwx
classwxGUI:
defOnInit(self):
frame=(parent=None,title='wxGUI',size=(160,140))
panel=(frame,-1)
=(panel,-1,'Start',pos=(0,0))
,
()
returnTrue
defOnButtonOK(self,event):
text=iftext=='Start':
'End')
eliftext=='End':
'Start')
app=wxGUI()
()
设计一个窗体,模拟QQ登录界面,当用户输入号码123456和密码654321时提示正确,否则提示错误。
答:
Python代码如下,
importwx
classwxGUI:
defOnInit(self):
frame=(parent=None,title='Login',size=(250,150),pos=(350,350))
panel=(frame,-1)
label1=(panel,-1,'UserName:
',pos=(0,10),style=
label2=(panel,-1,'Password:
',pos=(0,30),style=
=(panel,-1,pos=(70,10),size=(160,20))
=(panel,-1,pos=(70,30),size=(160,20),style=
buttonOK=(panel,-1,'OK',pos=(30,60))
,buttonOK)
buttonCancel=(panel,-1,'Cancel',pos=(120,60))
,buttonCancel)
()
()
returnTrue
defOnButtonOK(self,event):
usrName=usrPwd=ifusrName=='123456'andusrPwd=='654321':
('Right')
else:
('Wrong')
defOnButtonCancel(self,event):
pass
app=wxGUI()
()