实验题目:python面向对象程序设计
1、定义并实现一个矩形类Rectangle,其私有实例成员为矩形的左下角与右上角两个点的坐标,能设置左下角和右上角两个点的位置,能根据左下角与右上角两个点的坐标计算矩形的长、宽、周长和面积,另外根据需要适当添加其他成员方法和特殊方法(如构造方法)。实现并测试这个类。
- class Rectangle:
- def __init__(self,New_zxx,New_zxy,New_ysx,New_ysy):
- self.zxx=New_zxx
- self.zxy=New_zxy
- self.ysx=New_ysx
- self.ysy=New_ysy
- self.length = self.ysx - self.zxx
- self.width = self.ysy - self.zxy
- def perimeter(self):
- print('周长:{}'.format(2*(self.length+self.width)))
- def area(self):
- print('面积为:{}'.format(self.length*self.width))
- a = Rectangle(0,0,1,2)
- print(a.length)
- print(a.width)
- a.perimeter()
- a.area()
2、创建SchoolMem类,该类中包含三个数据成员:姓名、性别、年龄;创建Student类,继承自SchoolMem类,添加额外三个数据成员:班级、学号和数量统计;创建Teacher类,继承自SchoolMem类,添加额外三个数据成员:学院、工号和数量统计。要求给每个类适当添加属性、成员方法和特殊方法(如构造方法),实现学生和教师信息的输入输出。实现并测试这个类。(建议在父类和子类中使用同名函数以实现多态,如在SchoolMem类、Student类和Teacher类中分别实现printInfo方法输出对象的信息。)
- class SchoolMem:
- def __init__(self,name,sex,age):
- self.name=name
- self.sex = sex
- self.age = age
- def Alter(self):
- self.name = input('姓名')
- self.sex = input('性别')
- self.age = input('年龄')
- def PrintInfo(self):
- print(self.name)
- print(self.sex)
- print(self.age)
- class Student(SchoolMem):
- total = 0
- def __init__(self,name,sex,age,cno,sno):
- super().__init__(name,sex,age)
- self.cno = cno
- self.sno = sno
- Student.total+=1
- def Alter(self):
- self.cno = input('输入学生所属班级:')
- self.sno = input('输入学生学号:')
- def PrintInfo(self):
- super(Student, self).PrintInfo()
- print(self.cno)
- print(self.sno)
- class Teacher(SchoolMem):
- total = 0
- def __init__(self,name,sex,age,cono,jno):
- super().__init__(name, sex, age)
- self.cono = cono
- self.jno = jno
- Teacher.total +=1
- def Alter(self):
- self.cono = input('输入老师所属学院:')
- self.jno = input('输入老师工号:')
- def PrintInfo(self):
- super(Teacher, self).PrintInfo()
- print(self.cono)
- print(self.jno)
- a=Student('张三','男','18',5,1902073564)
- a.PrintInfo()
- b=Teacher('李四','男','30',2,1351332)
- b.PrintInfo()
3、给如下自定义列表类Mylist添加运算符重载函数,实现自定义列表的加法和乘法运算
class Mylist:
def __init__(self,iterable=()):
self.data = list(iterable)
让如下代码能正确运行:
L1 = MyList([1,2,3])
L2 = MyList([4,5,6])
L3 = L1+ L2
print(L3) #输出MyList([1,2,3,4,5,6])
L4 = L2 + L1
print(L4) #输出MyList([4,5,6,1,2,3])
L5 = L1 * 3
print(L5) #输出MyList([1,2,3,1,2,3,1,2,3])
L6 = 3 * L1
print(L6) #输出MyList([1,2,3,1,2,3,1,2,3])
L1 += L2
print(L1) #输出MyList([1,2,3,4,5,6])
L7 = -L1
print(L7) #输出MyList([-1,-2,-3,-4,-5,-6])
- class MyList:
- def __init__(self,iterable=()):
- self.data = list(iterable)
- def __add__(self, other):
- a = MyList(self.data + other.data)
- return a
- def __mul__(self, n):
- b = MyList(self.data * 3)
- return b
- def __rmul__(self, n):
- c = MyList(3*self.data)
- return c
- def __iadd__(self, other):
- self.data += other.data
- return self
- def __neg__(self):
- e = MyList()
- for i in self.data:
- e.data.append(i*-1)
- return e
- def __repr__(self):
- return repr('MyList({})'.format(self.data))
- L1 = MyList([1,2,3])
- L2 = MyList([4,5,6])
- L3 = L1 + L2
- print(L3) #输出MyList([1,2,3,4,5,6])
- L4 = L2 + L1
- print(L4) #输出MyList([4,5,6,1,2,3])
- L5 = L1 * 3
- print(L5) #输出MyList([1,2,3,1,2,3,1,2,3])
- L6 = 3 * L1
- print(L6)
- L1 += L2
- print(L1)
- L7 = -L1
- print(L7) #输出MyList([-1,-2,-3,-4,-5,-6])
4、设计一个用于学生管理的类Student(学生)。考虑到通用性,这里只抽象出所有学生都具有的数据成员:学号、姓名、性别、年龄、班级等。要求给每个数据成员声明对应的读写属性,定义下列成员方法:学生信息的录入、显示以及修改,另外根据需要适当添加特殊方法(如构造方法)。实现并测试这个类。
- class Student:
- def __init__(self,sno='',name='',sex='',age=0,classes=0):
- self.__sno = sno
- self.__name = name
- self.__sex = sex
- self.__age = age
- self.__classes = classes
- def __get(self):
- return self.__sno
- def __set(self,a):
- self.__sno = a
- sno = property(__get,__set)
- def __get__(self):
- return self.__name
- def __set(self,a):
- self.__name = a
- name = property(__get,__set)
- def __get(self):
- return self.__sex
- def __set(self,a):
- self.__sex = a
- sex = property(__get,__set)
- def __get(self):
- return self.__age
- def __set(self,a):
- self.__age = a
- age = property(__get,__set)
- def __get(self):
- return self.__classes
- def __set(self,a):
- self.__classes = a
- classes = property(__get,__set)
- def InputInfo(self):
- print('输入学生信息')
- sno = input('学号:')
- if not (len(sno)==10):
- print('学号必须是十位')
- return None
- name = input('姓名:')
- sex = input('性别(男,女)')
- if sex not in ('男','女'):
- print('性别必须是男或女')
- return None
- age = eval(input('年龄:'))
- if not isinstance(age,int):
- print('年龄必须为整数')
- return None
- classes = input('班级:')
- self.__sno = sno
- self.__name = name
- self.__sex = sex
- self.__age = age
- self.__classes = classes
- return self
- def show(self):
- print(f'sno:{self.__sno}\nname:{self.__name}\nsex:{self.__sex}\nage:{self.__age}\nclasses:{self.__classes}')
- def alter(self):
- while True:
- print('选择您要更改的信息:')
- print('1:修改学号')
- print('2:修改姓名')
- print('3:修改性别')
- print('4:修改年龄')
- print('5:修改班级')
- print('0:退出修改')
- i = eval(input('输入选项:'))
- if i == 0:
- self.show()
- break
- elif i==1:
- sno = input('输入学号:')
- if not len(sno)==10:
- print('学号为10位')
- continue
- self.__sno = sno
- elif i == 2:
- name = input('输入姓名:')
- self.__name = name
- elif i == 3:
- sex = input('性别(男,女)')
- if sex not in ('男', '女'):
- print('性别必须是男或女')
- continue
- self.__sex = sex
- elif i == 4:
- age = eval(input('年龄:'))
- if not isinstance(age, int):
- print('年龄必须为整数')
- continue
- self.__age = age
- elif i == 5:
- self.__classes = input('班级:')
- a = p6t4.Student()
- a.InputInfo()
- 输入学生信息:
- 学号:>? 1901070217
- 姓名:>? gzk
- 性别(男,女)>? 男
- 年龄:>? 15
- 班级:>? 2
- <p6t4.Student object at 0x00000211D488A288>
- a.show()
- sno:1901070217
- name:gzk
- sex:男
- age:15
- classes:2
- a.alter()
- 选择您要更改的信息:
- 1:修改学号
- 2:修改姓名
- 3:修改性别
- 4:修改年龄
- 5:修改班级
- 0:退出修改
- 输入选项:>? 2
- 输入姓名:>? 郭zk
- 选择您要更改的信息:
- 1:修改学号
- 2:修改姓名
- 3:修改性别
- 4:修改年龄
- 5:修改班级
- 0:退出修改
- 输入选项:>? 0
- sno:1901070217
- name:郭zk
- sex:男
- age:15
- classes:2
5、在第4题的基础上定义并实现一个学生数组类StudentArray,支持一批学生信息的处理,能实现以下菜单功能:
(1)学生信息录入
(2)学生信息显示(显示所有学生信息)
(3)学生信息删除(按学号)
- class StudentArray:
- __size = 0
- def __init__(self):
- self.__value = []
- def InputInfo(self):
- a = Student()
- a = a.InputInfo()
- if a != None:
- self.__value.append(a)
- print('录入成功')
- StudentArray.__size += 1
- def search(self):
- sno = input('请输入查询学号:')
- for i in range(len(self.__value)):
- if sno == self.__value[i].sno:
- return i
- else:
- print('不存在此学号的学生')
- return -1
- def show(self):
- print('所有学生信息为:')
- for a in self.__value:
- a.show()
- print('测试')
- def delete(self):
- i = self.search()
- if i != -1:
- del self.__value[i]
- StudentArray.__size -= 1
- print('删除成功')
- else:
- print('删除失败')
- def menu():
- print('''
- 1.学生信息录入
- 2.学生信息显示
- 3.学生信息删除
- 4.退出系统''')
- def main():
- b = StudentArray()
- while True:
- menu()
- n = eval(input('请输入选择:'))
- if n == 1:
- b.InputInfo()
- print()
- elif n == 2:
- b.show()
- print()
- elif n == 3:
- b.delete()
- print()
- elif n ==4:
- print('已经退出系统')
- break
- else:
- print('输入错误,重新输入')
- print()
- if __name__ == '__main__':
- main()
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!
实验题目:python面向对象程序设计的更多相关文章
- 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计
20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...
- 20155303 实验二 Java面向对象程序设计
20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...
- 20155304 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...
- 20155319 实验二 Java面向对象程序设计
20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ...
- 20165202 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:3 ...
- 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
随机推荐
- Oracle数据库由dataguard备库引起的log file sync等待
导读: 最近数据库经常出现会话阻塞的报警,过一会又会自动消失,昨天晚上恰好发生了一次,于是赶紧进行了查看,不看不知道,一看吓一跳,发现是由dataguard引起的log file sync等待.我们知 ...
- Contest 1428
A 移动次数是 \(\left|x_1-x_2\right|+\left|y_1-y_2\right|\). 如果 \(x_1\not=x_2\) 且 \(y_1\not=y_2\) 说明要换方向,两 ...
- Spring Cloud 学习 (六) Spring Cloud Config
在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置.日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的.随着服务数量的增加,配置文件的管理也是一件非常复杂的事 在微服务架构中, ...
- Spring Cloud 学习 (一) Eureka
微服务的功能主要有以下几个方面: 服务的注册和发现 服务的负载均衡 服务的容错 服务网关 服务配置的统一管理 链路追踪 实时日志 服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息 ...
- PyQt(Python+Qt)学习随笔:QTableWidget的takeItem和sortItems方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget中的takeItem方法从表格中取并去除项,sortItems方法对表格中的 ...
- Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量
老猿使用PyCharm有将近一个月了,发现PyCharm并不能很好的完成语法检查,有时运行时突然终止,仔细核查却发现是基本的语法错误,不过有次无意中移动鼠标到代码最右边的边框时发现其实PyCharm有 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中的menu菜单及menu bar菜单栏
菜单由menu bar菜单栏和menu菜单两部分构成,分别对应类QMenuBar和QMenu. menuBar是包含一系列下拉菜单项组成,menu包含两种,一种是直接对应Action的,一种是父菜单, ...
- IntelliJ IDEA2019.3.2破解/永久激活/安装教程
我想大家用过史上最好的开发工具就是idea了,没有之一!看到大家都在找idea的激活教程,今天我也在这里跟大家分享一下. 本教程针对现在官网针对的版本是idea2019.3.2,为防止以后会更新破解失 ...
- ES6 代码转成 ES5 代码的实现思路是什么(来自github每日一题)
将代码字符串解析成抽象语法树,即所谓的 AST 对 AST 进行处理,在这个阶段可以对 ES6 代码进行相应转换,即转成 ES5 代码 根据处理后的 AST 再生成代码字符串 每日一题https:// ...
- jQuery无限滚动
由于demo实在虚拟桌面写的,所以懒得在敲一遍了,直接贴图了