• python 面向对象(经典作业讲解)


    #############################总结########################

    # lst =['python%s期' %i for i in range(510)]
    # pageSize=10 #每页显示XX条数据
    # current=int(input("请输入当前页码:"))
    #
    # totle=0
    # if len(lst)%pageSize ==0:#数据除页码数余0
    # totle=len(lst)//pageSize #就启用地板除
    # else:
    # totle=len(lst)//pageSize+1 #如果除不尽 把页面地板粗+1
    # if current > totle:#如果输入的页面大于 地板除的最大数
    # print('没有数据了')
    # else:
    # # 一页为10行 * 要查看页-1 到 10*2
    # # 10 * 2 -1 :10*2
    # data=lst[pageSize*(current-1):pageSize*current]
    # for d in data:
    # print(d)
    class page:
        def __init__(self,lst,pagesize):
            self.lst=lst
            self.pagesize=pagesize
        @property
        def totle(self): # 计算有多少页
            if len(self.lst) % self.pagesize == 0:
                return len(self.lst) // self.pagesize
            else:
                return len(self.lst) // self.pagesize + 1
        #pagesize每页显示30
        def start(self):
            return self.lst[0:self.pagesize]
        def end(self):
            return self.lst[(self.totle - 1) * self.pagesize:self.totle * self.pagesize]
        def index(self):#指定页面显示
            ye = int(input('请输入你要显示的页面:'))
            if ye <1 or ye > self.totle:
                print('对不起,你输入的页面不存在')
            else:
                #计算莫一页的数据
                return  self.lst[(ye-1)*self.pagesize:ye*self.pagesize]
    p=page([1,2,3,4,5,6,7,8,9,10],3)
    print(p.start())
    print(p.end())
    print(p.index())

    1. 简述面向对象三大特性;
    封装:对属性的封装, 对功能的封装
    继承:子类自动拥有父类中除了私有内容外的其他所有内容
    多态:同一个对象多种形态. python中支持的是鸭子模型.

    封装:

    对属性的封装

    class Foo:
        def __init__(self,name,age)
            delf.name=name
            delf.age=age
    f=Foo('张三',12)

    对方法的封装

    class Foo:
        def shuping():
            print('开开心心的刷图')
        def hejiu():
            print('开开心心的喝酒')
    f=Foo()
    f.shuping()
    f.hejiu()

    继承

    class Base:
        def __init__(self):
            pass
    class Foo(Base):
        def __init__(self):#覆盖,重写
            pass
     f=Foo()
    ##意义 为了扩展

    多态

    一个类型 多种形态

    2.列举面向对象中所有的成员

      1.变量:

        实例变量,对象的变量

        类变量,类的变量

      2.方法:

        实例方法, 对象.方法() 形参第一个self

        类方法,@classmethod 形参第一个:cls

        静态方法 @ststicmethod 没要求,就是函数

      3.属性:

        把方法变成属性

        应用场景:当你的属性不能直接存储,需要计算的时候,

      4.私有

        __开头的内容,私有内容只能自己用

      5.特殊成员

       __init__

       __new__

       __call__

    3.用面向对象表示:学生,班级 老师的关系,并创建相关对象进行嵌套

    class Stu:
        def __init__(self,name,num,cla=None):
            self.name=name
            self.num=num
    class Cla:
        def __init__(self,name):
            self.name=name
            self.teach_list=[]
            self.stu_list=[]
    class Tea:
        def __init__(self,name):
            self.name=name
            self.cla_list=[]
    
    #添加学生
    s1=Stu('张三',1)
    s2=Stu('李四',2)
    s3=Stu('王五',3)
    
    #添加班级
    c1=Cla('终极一班')
    c2=Cla('小班')
    c3=Cla('中班')
    #添加老师
    t1=Tea('李白')
    t2=Tea('荆轲')
    t3=Tea('赵信')
    #给班级添加老师
    s1.Cla=c1
    s2.Cla=c2
    s3.Cla=c3
    # print(s1.Cla.name)
    
    #给班级分配老师
    c1.teach_list.append(t1)
    c1.teach_list.append(t2)
    c1.teach_list.append(t3)
    ##给老师分配班级
    t1.cla_list.append(c1)
    t1.cla_list.append(c2)
    t1.cla_list.append(c3)
    
    t2.cla_list.append(c2)
    
    t3.cla_list.append(c3)
    
    c2.teach_list.append(t2)
    c3.teach_list.append(t3)
    #给老师分配学生
    c1.stu_list.append(s1)
    c2.stu_list.append(s2)
    c3.stu_list.append(s3)

    学生选课:

    class Student:#学生
        def __init__(self, sno, sname):
            self.sno = sno
            self.sname = sname
            self.cour_list = []
        def chakan(self): # 查看课程
            for c in self.cour_list:
                print(f"{self.sname}选了{c.cname}")
        def tianjia(self, cour): # 添加课程
            self.cour_list.append(cour)
    class Course:#课程
        def __init__(self, cno, cname, teacher=None):
            self.cno = cno
            self.cname = cname
            self.teacher = teacher
        def chakan(self):
            print(f"{self.cno}, {self.cname}, {self.teacher.tname}")
        # 设置老师
        def shezhilaoshi(self, teacher):
            self.teacher = teacher
    class Teacher:#老师
        def __init__(self, tno, tname, tphone):
            self.tno = tno
            self.tname = tname
            self.tphone = tphone
    '''
    请完成以上三个类. 创建6个课程, 6个老师. 给课程安排好老师. 然后创建30个学⽣.
    每个学⽣随机被分配3个课程. 最终显⽰出这三⼗个学⽣的选课情况以及任课老师的电话
    '''
    # 准备生成随机数
    from random import randint
    c1 = Course("01", "抽烟")
    c2 = Course("02", "喝酒")
    c3 = Course("03", "烫头")
    c4 = Course("04", "点烟")
    c5 = Course("05", "倒酒")
    c6 = Course("06", "给人烫头")
    
    t1 = Teacher("01", "唐伯虎", "13301122001")
    t2 = Teacher("02", "祝枝山", "13301122002")
    t3 = Teacher("03", "文征明", "13301122003")
    t4 = Teacher("04", "李白", "13301122004")
    t5 = Teacher("05", "黄冠", "13301122005")
    t6 = Teacher("06", "谢晋", "13301122006")
    
    # 给课程设置老师
    c1.shezhilaoshi(t1)
    c2.shezhilaoshi(t2)
    c3.shezhilaoshi(t3)
    c4.shezhilaoshi(t4)
    c5.shezhilaoshi(t5)
    c6.shezhilaoshi(t6)
    #         0   1   2   3   4  5 #  0-5
    c_lst = [c1, c2, c3, c4, c5, c6]
    stu_lst = []
    for i in range(30): # 循环30次.
        stu = Student(i, "学生"+str(i)) # 创建30个学生
        # 生成随机的三个数字. 对应的是三个课程索引
        s = set()
        while len(s) < 3:
            s.add(randint(0, 5))
        # 把随机的三个课程索引对应的课程设置给学生
        for n in s:
            # print(n) # ???? 随机出来的课程的索引
            stu.tianjia(c_lst[n])
        stu_lst.append(stu) # 加到列表
    # 显示学生的选课情况以及老师的电话
    for s in stu_lst:
        print(f"学生编号:{s.sno}, 学生姓名:{s.sname}")
        # 拿到学生的课程信息
        for c in s.cour_list:
            print(f"	课程编号:{c.cno}, 课程名称: {c.cname}, 任课老师的电话是:{c.teacher.tphone}")
    ############结果####################
    学生编号:0, 学生姓名:学生0 课程编号:
    01, 课程名称: 抽烟, 任课老师的电话是:13301122001 课程编号:02, 课程名称: 喝酒, 任课老师的电话是:13301122002 课程编号:04, 课程名称: 点烟, 任课老师的电话是:13301122004 学生编号:1, 学生姓名:学生1 课程编号:01, 课程名称: 抽烟, 任课老师的电话是:13301122001 课程编号:02, 课程名称: 喝酒, 任课老师的电话是:13301122002 课程编号:04, 课程名称: 点烟, 任课老师的电话是:13301122004 学生编号:2, 学生姓名:学生2 课程编号:01, 课程名称: 抽烟, 任课老师的电话是:13301122001 课程编号:04, 课程名称: 点烟, 任课老师的电话是:13301122004 课程编号:06, 课程名称: 给人烫头, 任课老师的电话是:13301122006
    不怕大牛比自己牛,就怕大牛比自己更努力
  • 相关阅读:
    Codeforces Round #272 (Div. 2) A. Dreamoon and Stairs 水题
    Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组 暴力
    Codeforces Round #368 (Div. 2) D. Persistent Bookcase 离线 暴力
    Codeforces Round #368 (Div. 2) C. Pythagorean Triples 数学
    Codeforces Round #368 (Div. 2) B. Bakery 水题
    Codeforces Round #368 (Div. 2) A. Brain's Photos 水题
    BZOJ 4636: 蒟蒻的数列 分块
    BZOJ 4610: [Wf2016]Ceiling Functi 水题
    设置让TortoiseGit记住账号和密码
    JSON.stringify转换Date不正确的解決方法
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10159529.html
Copyright © 2020-2023  润新知