《Python程序设计基础》习题答案与分析课件

巡山小妖精
725次浏览
2021年02月12日 11:37
最佳经验
本文由作者推荐

-

2021年2月12日发(作者:序数词英语)


Python


程序设计基础



习题答案与分析





程昱




1




基础知识



1.1

< br>简单说明如何选择正确的


Python


版本。

< p>


答:



在选择


Python


的时候,一定要先考虑清楚自己学习


Python


的目的是什么,打算做哪方


面的开发,


有哪些扩展库可用,


这些扩展库最高支持哪个版本的

Python




Python 2.x


还是


Python 3.x


,最高支持到


Python 2.7.6


还是


Python 2.7.9

。这些问题都确定以后,再做出自己


的选择,这样才能事半功倍,而不至于把大量时 间浪费在


Python


的反复安装和卸载上。同


时还应该注意,当更新的


Python


版本推出之后, 不要急于更新,而是应该等确定自己所必


须使用的扩展库也推出了较新版本之后再进行更 新。



尽管如此,


Python 3< /p>


毕竟是大势所趋,


如果您暂时还没想到要做什么行业领域的应用开


发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择


Python 3.x


系列的


最高版本(目前是


Python 3.4.3


)。



1.2


为什么说


Python


采用的是基于值的内存管理模式?



Pyth on


采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只


有一份该值,多个变量指向同一块内存地址,例如下面的代码。



>>> x = 3


>>> id(x)


10417624


>>> y = 3


>>> id(y)


10417624


>>> y = 5


>>> id(y)


10417600


>>> id(x)


10417624


>>> x = [1, 2, 3, 1, 1, 2]


>>> id(x[0])==id(x[3])==id(x[4])


True


1.3


解释


Python

< p>
中的运算符“


/


”和“


/ /


”的区别。



答:




Python


2.x


中,“


/


”为普通除法,当两个数值对象进行除法运 算时,最终结果的精


度与操作数中精度最高的一致;在


Pyth on 3.x


中,“


/


”为真除法,与 除法的数学含义一致。




Python


2.x



Python


3.x


中,“


//


”表示整 除,对整数或浮点数进行该运算时,结果


为数学除法的整数部分。



1.4



Python


中导入模块中的对象有哪几种方式?



答:常用的有三种方式,分别为





import


模块名



[as


别名


]




from


模块名



import


对象名


[ as


别名


]




from math import *


1.5




pip




是目前比较常用的


Python


扩展库管理工具。



1.6


解释


Python


脚本程序的“

__name__


”变量及其作用。



答:



每个


P ython


脚本在运行时都有一个“


__name__


”属性。如果脚本作为模块被导入,则


其“


__ name__


”属性的值被自动设置为模块名;如果脚本独立运行,则其“


__name__


”属


性值被自动设置为“


__main__


”。利用“


__name__


”属性即可控制


Python


程序的运 行方式。



1.7


运算符“


%






可以






(可以、不可以)对浮点数进行求余数操作。



1.8


一个数字“


5











(是、不是)合法的


Python< /p>


表达式。



1.9



Python 2.x


中,


input()


函数接收到的数据类型由





界定符






确定,


而在


Python

< p>
3.x


中该函数则认为接收到的用户输入数据一律为





字符串







1.10


编写程序,用户输入一个三位以上的整数,输出其百位以上的数字。例如用户输



1234


,则程序输出


12


。(提示:使用整除运算。)



答:



1



Python 3.4.2


代码:



x = input('Please input an integer of more than 3 digits:')


try:






x = int(x)






x = x//100






if x == 0:










print('You must input an integer of more than 3 digits.')






else:










print(x)


except BaseException:






print('You must input an integer.')


2



Python 2.7.8


代码:



import types


x = input('Please input an integer of more than 3 digits:')


if type(x) != e:






print 'You must input an integer.'


elif len(str(x)) != 4:






print 'You must input an integer of more than 3 digits.'


else:






print x//100




2




Python


序列



2.1


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



答:



当列表增加或删除元素时,


列表对象自动进行内存扩展或收缩,


从而保证元素之间没有


缝隙,


但这涉及到列表元素的移动,


效率较低,


应尽量从列表尾部进行元素的增加与删除操


作以提高处理速度。



2.2 range()


函数在


Python 2.x


中返回一个




包含整数的列表







Python 3.x

< p>


range()


函数返回一个

< br>




可迭代的


range


对象







2.3


编写程序,生成包含


1000



0



100


之间的随 机整数,并统计每个元素的出现次


数。



答:可以使用集合来实现该功能。



1



Python 3.4.2


代码



import random


x = [t(0,100) for i in range(1000)]


d = set(x)


for v in d:






print(v, ':', (v))


2



Python 2.7.8


代码



import random


x = [t(0,100) for i in range(1000)]


d = set(x)


for v in d:


print v, ':', (v)


也可 以直接使用字典来实现该功能,


并且获得更高的执行效率,


例如 下面的


Python 3.4.2


代码:



listRandom = [t(1,100) for i in range(1000000)]


d = dict()


start = ()


for i in listRandom: #


对随机数列表扫描一次,即可得到结果





d[i] = (i,0)+1


print(()-start)


2.4


表达式“


[3] in [1, 2, 3, 4]


”的值为





False






2.5


编写程序,用户输入一个列表和


2


个整 数作为下标,然后输出列表中介于


2


个下标

之间的元素组成的子列表。例如用户输入


[1, 2, 3, 4, 5, 6]< /p>



2,5


,程序输出

[3, 4, 5, 6]




答:



1



Python 3.4.2


代码



x = input('Please input a list:')


x = eval(x)


start, end = eval(input('Please input the start position and the end position:'))


print(x[start:end])


2



Python 2.7.8


代码



x = input('Please input a list:')


start, end = input('Please input the start position and the end position:')


print x[start:end]


2.6


列表对象的


sort()


方法用来对列表元素进行原地排序,该函数返回值为




None






2.7


列表对象的




remove()



方法删除首次出 现的指定元素,如果列表中不存在要删除


的元素,则抛出异常。



2.8


假设列表对象


aList


的值为


[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]


,那么切片


aList[3:7]


得到的


值是





[6, 7, 9, 11]






2.9


设计一个字典,


并编写程序,


用户输入 内容作为


“键”



然后输出字典中对应 的


“值”



如果用户输入的“键”不存 在,则输出“您输入的键不存在!”



答:



1



Python 3.4.2


代码



d = {1:'a', 2:'b', 3:'c', 4:'d'}


v = input('Please input a key:')


v = eval(v)


print((v,'


您输入的的键不存在< /p>


'))


2



Python 2.7.8


代码



d = {1:'a', 2:'b', 3:'c', 4:'d'}


v = input('Please input a key:')


print((v,'


您输入的的键不存在


'))


2.10


编写程序,生成包含


20


个随机数的列 表,然后将前


10


个元素升序排列,后


10



元素降序排列,并输出结果。



答:



1



Python 3.4.2


代码



import random


x = [t(0,100) for i in range(20)]


print(x)


y = x[0:10]


()


x[0:10] = y


y = x[10:20]


(reverse=True)


x[10:20] = y


print(x)


2



Python 2.7.8


代码



import random


x = [t(0,100) for i in range(20)]


print x


y = x[0:10]


()


x[0:10] = y


y = x[10:20]


(reverse=True)


x[10:20] = y


print x


2.11



Python

< p>
中,字典和集合都是用一对




大括号




作 为界定符,字典的每个元素有


两部分组成,即





“键”









“值”





,其中





“键”





不允许重复。



2.12


使用字典对象的





items()




方法可以返回字典的“键


-


值对”列表,使用字典对


象的





keys()




方法可以返回字典的“键”列表,使用字典对象的





values()




方法可以


返回字典的“值”列表。



2.13


假设有列表


a = ['name', 'age', 'sex']



b = ['Dong', 38, 'Male']


,请使用一个语句将这

两个列表的内容转换为字典,


并且以列表


a


中的元素为


“键”



以列表< /p>


b


中的元素为


“值”


这个语句可以写为





c = dict(zip(a,b))






2.14


假设有一个列表


a



现要求从列表


a


中每


3


个元素取


1


个,


并且将取到的元素组成


新的列表


b


,可以使用语句





b = a[::3]






2.15


使用列表推导式生成包含


1 0


个数字


5


的列表,语句可以写为





[5


for


i


in


range(10)]






2.16





不可以





(可以、不可以)使用


del


命令来删 除元组中的部分元素。




3




选择与循环



3.1


分析逻辑运算符“


or


”的短路求值特性。

< p>


答:



假设有表达式“表达式


1


or


表达式


2


”,如果表达式

< br>1


的值等价于


True


,那么无 论表


达式


2


的值是什么,整个表达式的 值总是等价于


True


。因此,不需要再计算表达式

< p>
2


的值。



3.2


编写程序,运行后用户输入


4


位整数作为年 份,判断其是否为闰年。如果年份能被


400


整除,则为闰年; 如果年份能被


4


整除但不能被


100< /p>


整除也为闰年。



答:



1



Python 3.4.2


代码



x = input('Please input an integer of 4 digits meaning the year:')


x = eval(x)


if x%400==0 or (x%4==0 and not x%100==0):






print('Yes')


else:






print('No')


2



Python 2.7.8


代码



x = input('Please input an integer of 4 digits meaning the year:')


if x%400==0 or (x%4==0 and not x%100==0):






print 'Yes'


else:






print 'No'


3.3 Python


提供了两种基本的循环结构:





for


循环









while


循环







3.4


编写程序,生成一个包含


50


个随机整数的列表,然后删除其中所有奇数。(提示:


从后向前 删。)



答:


Python 3.4.2


代码如下,



import random


x = [t(0,100) for i in range(50)]


print(x)


i = len(x)-1


while i>=0:






if x[i]%2==1:










del x[i]






i-=1


print(x)


3.5


编写程序,生成一个包含


20


个随机整 数的列表,然后对其中偶数下标的元素进行


降序排列,奇数下标的元素不变。(提示:使 用切片。)



答:


Python 3.4.2


代码如下,



import random


x = [t(0,100) for i in range(20)]


print(x)


y = x[::2]


(reverse=True)


x[::2] = y


print(x)


3.6


编写程序,


用户从键盘输入小于


1000


的整数,


对其进行因式分解。


例如,


10=2


×


5



60=2


×


2


×

3


×


5




答:



1



Python 3.4.2


代码



x = input('Please input an integer less than 1000:')


x = eval(x)


t = x


i = 2


result = []


while True:






if t==1:










break






if t%i==0:










(i)










t = t/i






else:










i+=1


print(x,'=','*'.join(map(str,result)))


2



Python 2.7.8


代码



x = input('Please input an integer less than 1000:')


t = x


i = 2


result = []


while True:






if t==1:










break






if t%i==0:










(i)










t = t/i






else:










i+=1


print x,'=','*'.join(map(str,result))


3.7


编写程序,至少使用


2


种不同的方法计算


100


以内所有奇数的和。



答:


Python 3.4.2


代码如 下,


如果使用


Python 2.7.8


只需要把其中的


print()


函数改为

print


语句即可。



x = [i for i in range(1,100) if i%2==1]


print(sum(x))


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


3.8


编写程序,输出所有由


1



2



3



4


这四个数字组成的素数,并且在每个素数中 每


个数字只使用一次。



答:


Python 3.4.2


代码如下,



答:


Python 3.4.2


代码如 下,


如果使用


Python 2.7.8


只需要把其中的


print()


函数改为

print


语句即可。



x = input('Please input x:')


x = eval(x)


if x<0 or x>=20:






print(0)


elif 0<=x<5:






print(x)


elif 5<=x<10:






print(3*x-5)


elif 10<=x<20:






print(0.5*x-2)


3.9


编写程序,实现分段函数计算,如下表所示。



x


x<0


0<=x<5


0


x


y


5<=x<10


10<=x<20


20<=x


3x-5


0.5x-2


0


答:


Python 3.4.2< /p>


代码如下,


如果使用


Python 2. 7.8


只需要把其中的


print()


函数改为


print


语句即可。



x = input('Please input x:')


x = eval(x)


if x<0 or x>=20:






print(0)


elif 0<=x<5:






print(x)


elif 5<=x<10:






print(3*x-5)


elif 10<=x<20:


print(0.5*x-2)



4< /p>




字符串与正则表达式



4.1


假设有一段英文,其中有单独的字母“


I


”误 写为“


i


”,请编写程序进行纠正。



答:这里给出


Python


3.4. 2


代码,如果使用


Python


2. 7.8


的话只需要修改其中的


print()

< br>函数为


print


语句即可。



1


)不使用正则表达式



x =


x = e('i ','I ')


x = e(' i ',' I ')


print(x)


2


)使用正则表达式



x =


import re


pattern = e(r'(?:[^w]|b)i(?:[^w])')


while True:






result = (x)






if result:










if (0) != 0:














x = x[:(0)+1]+'I'+x[(0)-1:]










else:














x = x[:(0)]+'I'+x[(0)-1:]






else:










break


print(x)


4.2


假设有一段英文,其中有单词中间的字母“

< p>
i


”误写为“


I


”,请编 写程序进行纠正。



答:这里给出


Python


3.4. 2


代码,如果使用


Python


2. 7.8


的话只需要修改其中的


print()

< br>函数为


print


语句即可。



import re


x =


print(x)


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


while True:






result = (x)






if result:










if (0) != 0:














x = x[:(0)+1]+'i'+x[(0)-1:]










else:














x = x[:(0)]+'i'+x[(0)-1:]






else:










break


print(x)


4.3


有一段英 文文本,其中有单词连续重复了


2


次,编写程序检查重复的单词 并只保留


一个。例如文本内容为“


This is is a desk.


”,程序输出为“


This is a desk.




答:这里给出


Python


3.4. 2


代码,如果使用


Python


2. 7.8


的话只需要修改其中的


print()

< br>函数为


print


语句即可。



1


)方法一



import re


x = 'This is a a desk.'


pattern = e(r'b(w+)(s+1){1,}b')


matchResult = (x)


x = ((1),x)


print(x)


2


)方法二



x = 'This is a a desk.'


pattern = e(r'(?Pbw+b)s(?P=f)')


matchResult = (x)


x = e((0),(1))


4.4


简单解释

Python


的字符串驻留机制。



答:



Python

< br>支持字符串驻留机制,即:对于短字符串,将其赋值给多个不同的对象时,内


存中 只有一个副本,


多个对象共享该副本。


这一点不适用于长字符串 ,


即长字符串不遵守驻


留机制,下面的代码演示了短字符串和长 字符串在这方面的区别。



>>> a = '1234'


>>> b = '1234'


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


True


>>> a = '1234'*50


>>> b = '1234'*50


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


False


4.5

编写程序,用户输入一段英文,然后输出这段英文中所有长度为


3

< br>个字母的单词。



答:这里给出


Python


3.4. 2


代码,如果使用


Python


2. 7.8


的话只需要修改其中的


print()

< br>函数为


print


语句即可。


-


-


-


-


-


-


-


-