一、实验目的
1、理解类、对象、封装、继承、多态等概念;
2、掌握类的定义、创建步骤;
3、掌握self关键字的使用;
4、掌握运算符重载的使用;
二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台
三、实验内容
1、完成书中P212页的案例“反恐精英CS”,并运行查看结果;
#encoding=gbk"""1、完成书中P212页的案例“反恐精英CS”,并运行查看结果;"""# 定义表示战士、敌人的类class Person:def __init__(self, name):# 姓名self.name = name# 血量self.blood = 100self.gun = None# 给弹夹安装子弹def install_bullet(self, clip, bullet):# 弹夹放置子弹clip.save_bullets(bullet)# 给枪安装弹夹def install_clip(self, gun, clip):# 枪链接弹夹gun.mounting_clip(clip)#持枪def take_gun(self, gun):self.gun = gun# 开枪def fire(self, enemy):# 射击敌人self.gun.shoot(enemy)# 掉血def lose_blood(self, damage):self.blood -= damagedef __str__(self):return "%s剩余血量%d" % (self.name, self.blood)# 定义表示枪的类class Gun:def __init__(self):# 默认没有弹夹self.clip = None# 链接弹夹def mounting_clip(self, clip):if not self.clip:self.clip = clipdef __str__(self):if self.clip:return "枪已经装了弹夹"else:return "枪无弹夹"# 射击def shoot(self, enemy):# 弹夹出子弹bullet = self.clip.lunch_bullet()if bullet:bullet.hurt(enemy)else:print("没有子弹了,放了空枪...")# 定义表示弹夹的类class Clip:def __init__(self, capacity):# 最大容量self.capacity = capacity# 当前子弹数量self.bullet_list = []# 安装子弹def save_bullets(self, bullet):# 当前子弹数量小于最大容量if len(self.bullet_list) < self.capacity:self.bullet_list.append(bullet)def __str__(self):return "现在弹夹中子弹数量为:%d" % len(self.bullet_list)# 出子弹def lunch_bullet(self):# 判断当前弹夹中是否还有子弹if len(self.bullet_list) > 0:bullet = self.bullet_list[-1]self.bullet_list.pop()return bulletelse:return None# 定义表示子弹的类class Bullet:def __init__(self, damage):# 伤害力self.damage = damage# 伤害敌人def hurt(self, enemy):# 让敌人掉血enemy.lose_blood(self.damage)if __name__ == '__main__':soldier = Person("张三")n = int(input('枪的子弹为: '))clip = Clip(n)#print(clip)i = 0while i < 60:# 创建一个子弹bullet = Bullet(n)soldier.install_bullet(clip, bullet)i += 1print(clip)# 创建一个枪gun = Gun()print(gun)# 安装弹夹soldier.install_clip(gun, clip)print(gun)soldier.take_gun(gun)# 创建一个敌人enemy = Person("敌人")print(enemy)# 士兵拿枪soldier.fire(enemy)print(enemy)soldier.fire(enemy)print(enemy)

2、定义公民类,实例成员变量有身份证号、姓名、年龄和性别。定义公民类的派生类:学生类和教师类。学生类增加实例成员变量学号、班级和分数;教师类增加实例变量工号、系别和工资。编写主程序, 定义类的对象,设置对象的实例属性,显示对象的信息。
#encoding=gbk"""2、定义公民类,实例成员变量有身份证号、姓名、年龄和性别。定义公民类的派生类:学生类和教师类。学生类增加实例成员变量学号、班级和分数;教师类增加实例变量工号、系别和工资。编写主程序, 定义类的对象,设置对象的实例属性,显示对象的信息。"""class citizen():def __init__(self, ID_number=None, Name=None, Age=None, Sex=None):self.ID_number=ID_numberself.Name=Nameself.Age=Ageself.Sex=Sexclass student(citizen):def __init__(self, ID_number=None, Name=None, Age=None, Sex=None, Student_number=None, Class_name=None,fraction=None):super(student,self).__init__(ID_number,Name,Age,Sex)self.Student_number=Student_numberself.Class_name=Class_nameself.fraction=fractionclass teacher(citizen):def __init__(self, ID_number=None, Name=None, Age=None, Sex=None, Job_number=None, Department=None,wages=None):super(teacher,self).__init__(ID_number,Name,Age,Sex)self.Job_number=Job_numberself.Department=Departmentself.wages=wageskangkang = student("001","1111",18,'男',"11111","11111",52)kanglaoshi = teacher("002","1111",11,'1',"11","111",11111)print(kangkang.Name,kangkang.Sex,kangkang.Student_number)print(kanglaoshi.Name,kanglaoshi.Sex,kanglaoshi.ID_number)# print(kanglaoshi)

3、定义一个复数类,包括实部和虚部成员变量、构造方法、以及两个复数的加法、乘法和比较大小运算符定义。
#encoding=gbk"""3、定义一个复数类,包括实部和虚部成员变量、构造方法、以及两个复数的加法、乘法和比较大小运算符定义。"""from math import sqrtclass Complex:def __init__(self, real, imag):self.re = realself.im = imagdef __add__(self, o):return Complex(self.re + o.re, self.im + o.im)def __sub__(self, o):return Complex(self.re - o.re, self.im - o.im)def __mul__(self, o):return Complex(self.re * o.re - self.im * o.im, self.re * o.im + self.im * o.re)def __truediv__(self, o):m = o.re * o.re + o.im * o.imreturn Complex((self.re * o.re + self.im * o.im) / m, (self.im * o.re - self.re * o.im) / m)def __str__(self):if self.im == 0:return '%.2f' % self.reif self.re == 0:return '%.2fi' % self.imif self.im < 0:return '%.2f - %.2fi' % (self.re, -self.im)else:return '%.2f + %.2fi' % (self.re, self.im)def mod(self):return sqrt(self.re * self.re + self.im * self.im)def solve(comp1, comp2):print('加法:',comp1 + comp2)print('减法:',comp1 - comp2)print('乘法:',comp1 * comp2)print('除法:',comp1 / comp2)print('模1:%.2f' % comp1.mod())print('模2:%.2f' % comp2.mod())comp1 = Complex(2, 3)comp2 = Complex(5, -2)solve(comp1, comp2)

4、自定义类模拟三维向量及其运算。
定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。
#encoding=gbk"""4、自定义类模拟三维向量及其运算。定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。"""class MyArray:def __init__(self, x, y, z):self.__x = xself.__y = yself.__z = zdef add(self, a):x = self.__x + a.__xy = self.__y + a.__yz = self.__z + a.__zprint("和=({},{},{})".format(x, y, z))def sub(self, a):x = self.__x - a.__xy = self.__y - a.__yz = self.__z - a.__zprint("差=({},{},{})".format(x, y, z))def mul(self, a):x = self.__x * ay = self.__y * az = self.__z * aprint("乘积=({},{},{})".format(x, y, z))def div(self, a):x = self.__x / ay = self.__y / az = self.__z / aprint("商=({},{},{})".format(x, y, z))@propertydef length(self):return round(pow(pow(self.__x, 2) + pow(self.__y, 2) + pow(self.__z, 2), 0.5), 3)list = input("请输入六个数:").split()print('N1:', list[0], list[1], list[2])print('N2:', list[3], list[4], list[5])n1 = MyArray(int(list[0]), int(list[1]), int(list[2]))n2 = MyArray(int(list[3]), int(list[4]), int(list[5]))n1.add(n2)n1.sub(n2)n1.mul(2)n1.div(2)print(n1.length)

心得体会
学习了类的定义,练习了类的创建
