1、定义并实现一个矩形类Rectangle,其私有实例成员为矩形的左下角与右上角两个点的坐标,能设置左下角和右上角两个点的位置,能根据左下角与右上角两个点的坐标计算矩形的长、宽、周长和面积,另外根据需要适当添加其他成员方法和特殊方法(如构造方法)。实现并测试这个类。

  1. class Rectangle:
  2. def __init__(self,New_zxx,New_zxy,New_ysx,New_ysy):
  3. self.zxx=New_zxx
  4. self.zxy=New_zxy
  5. self.ysx=New_ysx
  6. self.ysy=New_ysy
  7. self.length = self.ysx - self.zxx
  8. self.width = self.ysy - self.zxy
  9. def perimeter(self):
  10. print('周长:{}'.format(2*(self.length+self.width)))
  11. def area(self):
  12. print('面积为:{}'.format(self.length*self.width))
  13.  
  14. a = Rectangle(0,0,1,2)
  15. print(a.length)
  16. print(a.width)
  17. a.perimeter()
  18. a.area()

2、创建SchoolMem类,该类中包含三个数据成员:姓名、性别、年龄;创建Student类,继承自SchoolMem类,添加额外三个数据成员:班级、学号和数量统计;创建Teacher类,继承自SchoolMem类,添加额外三个数据成员:学院、工号和数量统计。要求给每个类适当添加属性、成员方法和特殊方法(如构造方法),实现学生和教师信息的输入输出。实现并测试这个类。(建议在父类和子类中使用同名函数以实现多态,如在SchoolMem类、Student类和Teacher类中分别实现printInfo方法输出对象的信息。)

  1. class SchoolMem:
  2. def __init__(self,name,sex,age):
  3. self.name=name
  4. self.sex = sex
  5. self.age = age
  6.  
  7. def Alter(self):
  8. self.name = input('姓名')
  9. self.sex = input('性别')
  10. self.age = input('年龄')
  11. def PrintInfo(self):
  12. print(self.name)
  13. print(self.sex)
  14. print(self.age)
  15. class Student(SchoolMem):
  16. total = 0
  17. def __init__(self,name,sex,age,cno,sno):
  18. super().__init__(name,sex,age)
  19. self.cno = cno
  20. self.sno = sno
  21. Student.total+=1
  22. def Alter(self):
  23. self.cno = input('输入学生所属班级:')
  24. self.sno = input('输入学生学号:')
  25. def PrintInfo(self):
  26. super(Student, self).PrintInfo()
  27. print(self.cno)
  28. print(self.sno)
  29.  
  30. class Teacher(SchoolMem):
  31. total = 0
  32. def __init__(self,name,sex,age,cono,jno):
  33. super().__init__(name, sex, age)
  34. self.cono = cono
  35. self.jno = jno
  36. Teacher.total +=1
  37. def Alter(self):
  38. self.cono = input('输入老师所属学院:')
  39. self.jno = input('输入老师工号:')
  40. def PrintInfo(self):
  41. super(Teacher, self).PrintInfo()
  42. print(self.cono)
  43. print(self.jno)
  44. a=Student('张三','男','18',5,1902073564)
  45. a.PrintInfo()
  46. b=Teacher('李四','男','30',2,1351332)
  47. 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])

  1. class MyList:
  2. def __init__(self,iterable=()):
  3. self.data = list(iterable)
  4.  
  5. def __add__(self, other):
  6. a = MyList(self.data + other.data)
  7. return a
  8. def __mul__(self, n):
  9. b = MyList(self.data * 3)
  10. return b
  11.  
  12. def __rmul__(self, n):
  13. c = MyList(3*self.data)
  14. return c
  15.  
  16. def __iadd__(self, other):
  17. self.data += other.data
  18. return self
  19.  
  20. def __neg__(self):
  21. e = MyList()
  22. for i in self.data:
  23. e.data.append(i*-1)
  24. return e
  25. def __repr__(self):
  26. return repr('MyList({})'.format(self.data))
  27. L1 = MyList([1,2,3])
  28. L2 = MyList([4,5,6])
  29. L3 = L1 + L2
  30. print(L3) #输出MyList([1,2,3,4,5,6])
  31. L4 = L2 + L1
  32. print(L4) #输出MyList([4,5,6,1,2,3])
  33. L5 = L1 * 3
  34. print(L5) #输出MyList([1,2,3,1,2,3,1,2,3])
  35. L6 = 3 * L1
  36. print(L6)
  37. L1 += L2
  38. print(L1)
  39. L7 = -L1
  40. print(L7) #输出MyList([-1,-2,-3,-4,-5,-6])

4、设计一个用于学生管理的类Student(学生)。考虑到通用性,这里只抽象出所有学生都具有的数据成员:学号、姓名、性别、年龄、班级等。要求给每个数据成员声明对应的读写属性,定义下列成员方法:学生信息的录入、显示以及修改,另外根据需要适当添加特殊方法(如构造方法)。实现并测试这个类。

  1. class Student:
  2. def __init__(self,sno='',name='',sex='',age=0,classes=0):
  3. self.__sno = sno
  4. self.__name = name
  5. self.__sex = sex
  6. self.__age = age
  7. self.__classes = classes
  8.  
  9. def __get(self):
  10. return self.__sno
  11. def __set(self,a):
  12. self.__sno = a
  13. sno = property(__get,__set)
  14.  
  15. def __get__(self):
  16. return self.__name
  17. def __set(self,a):
  18. self.__name = a
  19. name = property(__get,__set)
  20.  
  21. def __get(self):
  22. return self.__sex
  23. def __set(self,a):
  24. self.__sex = a
  25. sex = property(__get,__set)
  26.  
  27. def __get(self):
  28. return self.__age
  29. def __set(self,a):
  30. self.__age = a
  31. age = property(__get,__set)
  32.  
  33. def __get(self):
  34. return self.__classes
  35. def __set(self,a):
  36. self.__classes = a
  37. classes = property(__get,__set)
  38.  
  39. def InputInfo(self):
  40. print('输入学生信息')
  41. sno = input('学号:')
  42. if not (len(sno)==10):
  43. print('学号必须是十位')
  44. return None
  45. name = input('姓名:')
  46. sex = input('性别(男,女)')
  47. if sex not in ('男','女'):
  48. print('性别必须是男或女')
  49. return None
  50. age = eval(input('年龄:'))
  51. if not isinstance(age,int):
  52. print('年龄必须为整数')
  53. return None
  54. classes = input('班级:')
  55. self.__sno = sno
  56. self.__name = name
  57. self.__sex = sex
  58. self.__age = age
  59. self.__classes = classes
  60. return self
  61. def show(self):
  62. print(f'sno:{self.__sno}\nname:{self.__name}\nsex:{self.__sex}\nage:{self.__age}\nclasses:{self.__classes}')
  63. def alter(self):
  64. while True:
  65. print('选择您要更改的信息:')
  66. print('1:修改学号')
  67. print('2:修改姓名')
  68. print('3:修改性别')
  69. print('4:修改年龄')
  70. print('5:修改班级')
  71. print('0:退出修改')
  72. i = eval(input('输入选项:'))
  73. if i == 0:
  74. self.show()
  75. break
  76. elif i==1:
  77. sno = input('输入学号:')
  78. if not len(sno)==10:
  79. print('学号为10位')
  80. continue
  81.  
  82. self.__sno = sno
  83. elif i == 2:
  84. name = input('输入姓名:')
  85. self.__name = name
  86. elif i == 3:
  87. sex = input('性别(男,女)')
  88. if sex not in ('男', '女'):
  89. print('性别必须是男或女')
  90. continue
  91. self.__sex = sex
  92. elif i == 4:
  93. age = eval(input('年龄:'))
  94. if not isinstance(age, int):
  95. print('年龄必须为整数')
  96. continue
  97. self.__age = age
  98. elif i == 5:
  99. self.__classes = input('班级:')
  1. a = p6t4.Student()
  2. a.InputInfo()
  3. 输入学生信息:
  4. 学号:>? 1901070217
  5. 姓名:>? gzk
  6. 性别(男,女)>? 男
  7. 年龄:>? 15
  8. 班级:>? 2
  9. <p6t4.Student object at 0x00000211D488A288>
  10. a.show()
  11. sno:1901070217
  12. name:gzk
  13. sex:男
  14. age:15
  15. classes:2
  16. a.alter()
  17. 选择您要更改的信息:
  18. 1:修改学号
  19. 2:修改姓名
  20. 3:修改性别
  21. 4:修改年龄
  22. 5:修改班级
  23. 0:退出修改
  24. 输入选项:>? 2
  25. 输入姓名:>? 郭zk
  26. 选择您要更改的信息:
  27. 1:修改学号
  28. 2:修改姓名
  29. 3:修改性别
  30. 4:修改年龄
  31. 5:修改班级
  32. 0:退出修改
  33. 输入选项:>? 0
  34. sno:1901070217
  35. name:郭zk
  36. sex:男
  37. age:15
  38. classes:2

5、在第4题的基础上定义并实现一个学生数组类StudentArray,支持一批学生信息的处理,能实现以下菜单功能:

(1)学生信息录入

(2)学生信息显示(显示所有学生信息)

(3)学生信息删除(按学号)

  1. class StudentArray:
  2. __size = 0
  3.  
  4. def __init__(self):
  5. self.__value = []
  6. def InputInfo(self):
  7. a = Student()
  8. a = a.InputInfo()
  9. if a != None:
  10. self.__value.append(a)
  11. print('录入成功')
  12. StudentArray.__size += 1
  13.  
  14. def search(self):
  15. sno = input('请输入查询学号:')
  16. for i in range(len(self.__value)):
  17. if sno == self.__value[i].sno:
  18. return i
  19. else:
  20. print('不存在此学号的学生')
  21. return -1
  22. def show(self):
  23. print('所有学生信息为:')
  24. for a in self.__value:
  25. a.show()
  26. print('测试')
  27.  
  28. def delete(self):
  29. i = self.search()
  30. if i != -1:
  31. del self.__value[i]
  32. StudentArray.__size -= 1
  33. print('删除成功')
  34. else:
  35. print('删除失败')
  36.  
  37. def menu():
  38. print('''
  39. 1.学生信息录入
  40. 2.学生信息显示
  41. 3.学生信息删除
  42. 4.退出系统''')
  43.  
  44. def main():
  45. b = StudentArray()
  46. while True:
  47. menu()
  48. n = eval(input('请输入选择:'))
  49. if n == 1:
  50. b.InputInfo()
  51. print()
  52. elif n == 2:
  53. b.show()
  54. print()
  55. elif n == 3:
  56. b.delete()
  57. print()
  58. elif n ==4:
  59. print('已经退出系统')
  60. break
  61. else:
  62. print('输入错误,重新输入')
  63. print()
  64.  
  65. if __name__ == '__main__':
  66. main()

 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!

实验题目:python面向对象程序设计的更多相关文章

  1. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

  2. 20155303 实验二 Java面向对象程序设计

    20155303 实验二 Java面向对象程序设计 目录 一.单元测试和TDD 任务一:实现百分制成绩转成"优.良.中.及格.不及格"五级制成绩的功能 任务二:以TDD的方式研究学 ...

  3. 20155304 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...

  4. 20155319 实验二 Java面向对象程序设计

    20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ...

  5. 20165202 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:贾海粟 学号:20165202 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:3 ...

  6. 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告

    20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...

  7. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  8. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  9. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

随机推荐

  1. 01-01.单一职责原则(Single Responsibility)

    1.基本介绍 对于类来说的,就是一个类,应该只负责一项职责(一个类只管一件事). 如类A负责两个不同职责:职责1,职责2. 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解 ...

  2. CSP-SJX2019 解题报告

    T1 日期 日高于 \(31\) 或等于 \(00\) 的要修改 \(1\) 次. 月高于 \(12\) 或等于 \(00\) 的要修改 \(1\) 次. 月等于 \(02\) 且日大于 \(28\) ...

  3. K8ssandra——专为Kubernetes云原生数据而生

    DataStax最近发布了K8ssandra--一个开源的.部署于Kubernetes上的Apache Cassandra全新发行版本.K8ssandra一站式集合了在Kubernetes上部署开源版 ...

  4. 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...

  5. Calendar类、 System类、 StringBulider类、 包装类

    Calendar类 ​ 概念 ​ java . util . Calendar 日历类,抽象类,在Date类后出现的,替换掉了很多Date类中的方法.该类将所有的可能用到的时间信息封装为静态成员变量. ...

  6. IdentityServer4系列 | 简化模式

    一.前言 从上一篇关于资源密码凭证模式中,通过使用client_id和client_secret以及用户名密码通过应用Client(客户端)直接获取,从而请求获取受保护的资源,但是这种方式存在clie ...

  7. Tree--二叉树BinarySearchTree

    BinarySearchTreeMap的实现 1 public interface Map<K extends Comparable<K>, V> { 2 void put(K ...

  8. <阿里工程师的自我素养>读后感-技术人应该具备的一些基本素质

    一.技术人具备"结构化思维"意味着什么? 1.什么是结构化思维? 结构化思维:逻辑+套路. 表达要有逻辑,所谓逻辑是指我们的结构之间必须是有逻辑关系的. 四种组织思想的逻辑关系 : ...

  9. [RoarCTF2019]黄金6年

    嘶吼CTF的杂项题 这道题目比较简单 下载之后是一个mp4文件,黄金六年,害,亲爱的热爱的里面的梗 使用010 Editor打开视频文件,发现最下面有base64编码 UmFyIRoHAQAzkrXl ...

  10. selenium常用的标签

    1.selenium之 下拉选择框Select.反选框Deselect.options 我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框.后者我 ...