欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

实验题目:python面向对象程序设计

程序员文章站 2022-06-27 17:58:53
1、定义并实现一个矩形类Rectangle,其私有实例成员为矩形的左下角与右上角两个点的坐标,能设置左下角和右上角两个点的位置,能根据左下角与右上角两个点的坐标计算矩形的长、宽、周长和面积,另外根据需要适当添加其他成员方法和特殊方法(如构造方法)。实现并测试这个类。class Rectangle: def __init__(self,New_zxx,New_zxy,New_ysx,New_ysy): self.zxx=New_zxx self.zxy=New_z...

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()

 

本文地址:https://blog.csdn.net/Zkang520/article/details/110281730