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"\t课程编号:{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

 

posted @ 2018-12-21 23:35  崽崽1573  阅读(1007)  评论(0编辑  收藏  举报