《Python程序设计》习题与答案-python教材答案 下载本文

第6章 面向对象程序设计

6.1 继承6.5节例2中的Person类生成Student类,填写新的函数用来设置学生专业,然后生成该类对象并显示信息。

答:Python 3.4.2代码为

import types

class Person(object): #基类必须继承于object,否则在派生类中将无法使用super()函数 def __init__(self, name = '', age = 20, sex = 'man'): self.setName(name) self.setAge(age) self.setSex(sex) def setName(self, name):

if not isinstance(name,str):

print('name must be string.') return

self.__name = name def setAge(self, age):

if not isinstance(age,int):

print('age must be integer.') return

self.__age = age def setSex(self, sex):

if sex != 'man' and sex != 'woman':

print('sex must be \ return

self.__sex = sex def show(self):

print(self.__name) print(self.__age) print(self.__sex) class Student(Person):

def __init__(self, name='', age = 30, sex = 'man', major = 'Computer'): #调用基类构造方法初始化基类的私有数据成员 super(Student, self).__init__(name, age, sex)

self.setMajor(major) #初始化派生类的数据成员 def setMajor(self, major):

if not isinstance(major, str):

print('major must be a string.') return

self.__major = major def show(self):

super(Student, self).show()

print(self.__major) if __name__ =='__main__':

zhangsan = Person('Zhang San', 19, 'man') zhangsan.show()

lisi = Student('Li Si',32, 'man', 'Math') lisi.show()

6.2 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。 答:Python 3.4.2代码如下 class Vecter3:

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 return r

def __sub__(self, n): r = Vecter3() r.X = self.X - n.X r.Y = self.Y - n.Y r.Z = self.Z - n.Z return r

def __mul__(self, n): r = Vecter3() r.X = self.X * n r.Y = self.Y * n r.Z = self.Z * n return r

def __truediv__(self, n): r = Vecter3() r.X = self.X / n r.Y = self.Y / n r.Z = self.Z / n return r

def __floordiv__(self, n): r = Vecter3() r.X = self.X // n r.Y = self.Y // n r.Z = self.Z // n

return r def show(self):

print((self.X,self.Y,self.Z)) v1 = Vecter3(1,2,3) v2 = Vecter3(4,5,6) v3 = v1+v2 v3.show() v4 = v1-v2 v4.show() v5 = v1*3 v5.show() v6 = v1/2 v6.show()

6.3 面向对象程序设计的三要素分别为 封装 、 继承 和 多态 。 6.4 简单解释Python中以下划线开头的变量名特点。 答:

在Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中。用下划线作为变量前缀和后缀来表示类的特殊成员:

? _xxx:这样的对象叫做保护变量,不能用'from module import *'导入,只有类对象和子类对象能访问这些变量;

? __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() for i in s]

f = open(r'd:\\2.txt','w') f.writelines(r) f.close()

7.2 编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。 答:Python 3.4.2代码 import pickle

d = {'张三':98,'李四':90,'王五':100} print(d)

f = open('score.dat','wb') pickle.dump(1,f) pickle.dump(d,f) f.close

f = open('score.dat','rb') pickle.load(f) d = pickle.load(f) f.close() print(d)

7.3 使用shutil模块中的move()方法进行文件移动。 答:

>>> import shutil

>>> shutil.move(r'd:\\1.txt', r'e:\\1.txt') 'e:\\\\1.txt'

7.4 简单解释文本文件与二进制文件的区别。 答:

(1)文本文件

文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\\n'结尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和理解的字符串,如英文字母、汉字、数字字符串。文本文件可以使用字处理软件如gedit、记事本进行编辑。

(2)二进制文件

二进制文件把对象内容以字节串(bytes)进行存储,无法用记事本或其他普通字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行解码后读取、显示、修改或执行。常见的如图形图像文件、音视频文件、可执行文件、资源文件、各种数据库文件、各类office文档等都属于二进制文件。

7.5 编写代码,将当前工作目录修改为“c:\\”,并验证,最后将当前工作目录恢复为原来的目录。

答:

>>> import os >>> os.getcwd() 'C:\\\\Python34'

>>> os.chdir(r'c:\\\\') >>> os.getcwd() 'c:\\\\'

>>> os.chdir(r'c:\\Python34') >>> os.getcwd() 'c:\\\\Python34'

7.6 编写程序,用户输入一个目录和一个文件名,搜索该目录及其子目录中是否存在该文件。

答:

1)Python 3.4.2代码 import sys import os

directory = sys.argv[1] filename = sys.argv[2] paths = os.walk(directory) for root,dirs,files in paths: if filename in files: print('Yes')