实验题目:python面向对象程序设计
阅读原文时间:2023年07月08日阅读:3

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. a = Rectangle(0,0,1,2)

  14. print(a.length)

  15. print(a.width)

  16. a.perimeter()

  17. 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. def Alter(self):

  7. self.name = input('姓名')

  8. self.sex = input('性别')

  9. self.age = input('年龄')

  10. def PrintInfo(self):

  11. print(self.name)

  12. print(self.sex)

  13. print(self.age)

  14. class Student(SchoolMem):

  15. total = 0

  16. def __init__(self,name,sex,age,cno,sno):

  17. super().__init__(name,sex,age)

  18. self.cno = cno

  19. self.sno = sno

  20. Student.total+=1

  21. def Alter(self):

  22. self.cno = input('输入学生所属班级:')

  23. self.sno = input('输入学生学号:')

  24. def PrintInfo(self):

  25. super(Student, self).PrintInfo()

  26. print(self.cno)

  27. print(self.sno)

  28. class Teacher(SchoolMem):

  29. total = 0

  30. def __init__(self,name,sex,age,cono,jno):

  31. super().__init__(name, sex, age)

  32. self.cono = cono

  33. self.jno = jno

  34. Teacher.total +=1

  35. def Alter(self):

  36. self.cono = input('输入老师所属学院:')

  37. self.jno = input('输入老师工号:')

  38. def PrintInfo(self):

  39. super(Teacher, self).PrintInfo()

  40. print(self.cono)

  41. print(self.jno)

  42. a=Student('张三','男','18',5,1902073564)

  43. a.PrintInfo()

  44. b=Teacher('李四','男','30',2,1351332)

  45. 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. def __add__(self, other):

  5. a = MyList(self.data + other.data)

  6. return a

  7. def __mul__(self, n):

  8. b = MyList(self.data * 3)

  9. return b

  10. def __rmul__(self, n):

  11. c = MyList(3*self.data)

  12. return c

  13. def __iadd__(self, other):

  14. self.data += other.data

  15. return self

  16. def __neg__(self):

  17. e = MyList()

  18. for i in self.data:

  19. e.data.append(i*-1)

  20. return e

  21. def __repr__(self):

  22. return repr('MyList({})'.format(self.data))

  23. L1 = MyList([1,2,3])

  24. L2 = MyList([4,5,6])

  25. L3 = L1 + L2

  26. print(L3) #输出MyList([1,2,3,4,5,6])

  27. L4 = L2 + L1

  28. print(L4) #输出MyList([4,5,6,1,2,3])

  29. L5 = L1 * 3

  30. print(L5) #输出MyList([1,2,3,1,2,3,1,2,3])

  31. L6 = 3 * L1

  32. print(L6)

  33. L1 += L2

  34. print(L1)

  35. L7 = -L1

  36. 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. def __get(self):

  9. return self.__sno

  10. def __set(self,a):

  11. self.__sno = a

  12. sno = property(__get,__set)

  13. def __get__(self):

  14. return self.__name

  15. def __set(self,a):

  16. self.__name = a

  17. name = property(__get,__set)

  18. def __get(self):

  19. return self.__sex

  20. def __set(self,a):

  21. self.__sex = a

  22. sex = property(__get,__set)

  23. def __get(self):

  24. return self.__age

  25. def __set(self,a):

  26. self.__age = a

  27. age = property(__get,__set)

  28. def __get(self):

  29. return self.__classes

  30. def __set(self,a):

  31. self.__classes = a

  32. classes = property(__get,__set)

  33. def InputInfo(self):

  34. print('输入学生信息')

  35. sno = input('学号:')

  36. if not (len(sno)==10):

  37. print('学号必须是十位')

  38. return None

  39. name = input('姓名:')

  40. sex = input('性别(男,女)')

  41. if sex not in ('男','女'):

  42. print('性别必须是男或女')

  43. return None

  44. age = eval(input('年龄:'))

  45. if not isinstance(age,int):

  46. print('年龄必须为整数')

  47. return None

  48. classes = input('班级:')

  49. self.__sno = sno

  50. self.__name = name

  51. self.__sex = sex

  52. self.__age = age

  53. self.__classes = classes

  54. return self

  55. def show(self):

  56. print(f'sno:{self.__sno}\nname:{self.__name}\nsex:{self.__sex}\nage:{self.__age}\nclasses:{self.__classes}')

  57. def alter(self):

  58. while True:

  59. print('选择您要更改的信息:')

  60. print('1:修改学号')

  61. print('2:修改姓名')

  62. print('3:修改性别')

  63. print('4:修改年龄')

  64. print('5:修改班级')

  65. print('0:退出修改')

  66. i = eval(input('输入选项:'))

  67. if i == 0:

  68. self.show()

  69. break

  70. elif i==1:

  71. sno = input('输入学号:')

  72. if not len(sno)==10:

  73. print('学号为10位')

  74. continue

  75. self.__sno = sno

  76. elif i == 2:

  77. name = input('输入姓名:')

  78. self.__name = name

  79. elif i == 3:

  80. sex = input('性别(男,女)')

  81. if sex not in ('男', '女'):

  82. print('性别必须是男或女')

  83. continue

  84. self.__sex = sex

  85. elif i == 4:

  86. age = eval(input('年龄:'))

  87. if not isinstance(age, int):

  88. print('年龄必须为整数')

  89. continue

  90. self.__age = age

  91. elif i == 5:

  92. self.__classes = input('班级:')

  93. a = p6t4.Student()

  94. a.InputInfo()

  95. 输入学生信息:

  96. 学号:>? 1901070217

  97. 姓名:>? gzk

  98. 性别(男,女)>? 男

  99. 年龄:>? 15

  100. 班级:>? 2

  101. a.show()

  102. sno:1901070217

  103. name:gzk

  104. sex:男

  105. age:15

  106. classes:2

  107. a.alter()

  108. 选择您要更改的信息:

  109. 1:修改学号

  110. 2:修改姓名

  111. 3:修改性别

  112. 4:修改年龄

  113. 5:修改班级

  114. 0:退出修改

  115. 输入选项:>? 2

  116. 输入姓名:>? 郭zk

  117. 选择您要更改的信息:

  118. 1:修改学号

  119. 2:修改姓名

  120. 3:修改性别

  121. 4:修改年龄

  122. 5:修改班级

  123. 0:退出修改

  124. 输入选项:>? 0

  125. sno:1901070217

  126. name:郭zk

  127. sex:男

  128. age:15

  129. classes:2

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

(1)学生信息录入

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

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

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

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