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

# 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("", "抽烟")
c2 = Course("", "喝酒")
c3 = Course("", "烫头")
c4 = Course("", "点烟")
c5 = Course("", "倒酒")
c6 = Course("", "给人烫头") t1 = Teacher("", "唐伯虎", "")
t2 = Teacher("", "祝枝山", "")
t3 = Teacher("", "文征明", "")
t4 = Teacher("", "李白", "")
t5 = Teacher("", "黄冠", "")
t6 = Teacher("", "谢晋", "") # 给课程设置老师
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

python 面向对象(经典作业讲解)的更多相关文章

  1. python面向对象、模块讲解

    (1)模块的介绍: 1.什么是模块  模块是一系列功能的集合体  常见的模块形式(自定义模块.第三方模块.内置模块):   1.一个module.py文件就是一个模块,文件名是module.py,而模 ...

  2. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  3. python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)

    昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ...

  4. python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)

    一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...

  5. Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)

    面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...

  6. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)

     先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...

  7. 第三模块:面向对象&网络编程基础 第3章 选课系统作业讲解

    01-选课系统作业讲解1 02--选课系统作业讲解2 03-选课系统作业讲解3 04--选课系统作业讲解4 01-选课系统作业讲解1 02--选课系统作业讲解2 03-选课系统作业讲解3 04--选课 ...

  8. Python 的经典入门书籍

    实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都 ...

  9. python入门经典_好资源送不停

    Python入门经典(2K超清_送书) https://study.163.com/course/courseMain.htm?courseId=1006183019&share=2& ...

随机推荐

  1. 水课 or not

    很不幸,这学期的毛概老师是个老古董,讲的内容也甚是枯燥和迂腐,个人角度是不太喜欢.然而这也仅仅是站在个人感性的角度,唏嘘一下也就够了.听不下去了,写点东西. 有时候会想,是不是随着自己长大,渐渐地对专 ...

  2. K - Transformation HDU - 4578 线段树经典题(好题)

    题意:区间  加   变成定值 乘  区间查询:和 平方和 立方和 思路:超级超级超级麻烦的一道题  设3个Lazy 标记分别为  change 改变mul乘 add加  优先度change>m ...

  3. [USACO12MAR] 花盆Flowerpot

    类型:二分+单调队列 传送门:>Here< 题意:给出$N$个点的坐标,要求根据$x$轴选定一段区间$[L,R]$,使得其中的点的最大与最小的$y$值之差$\geq D$.求$Min\{R ...

  4. 【cf789D】Weird journey(欧拉路、计数)

    cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...

  5. linux系统下saltstack的安装和配置

    Saltstack是一个新的基础设施管理工具,两大功能:远程执行和配置管理. Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具.由Master和Minion构成,通过Zer ...

  6. Codeforces Round #545 Div1 题解

    Codeforces Round #545 Div1 题解 来写题解啦QwQ 本来想上红的,结果没做出D.... A. Skyscrapers CF1137A 题意 给定一个\(n*m\)的网格,每个 ...

  7. 选做题:设计并实现一个Book类

    目录 题目分析 设计思路 具体代码 测试代码 运行截图 参考资料 题目分析 题目内容 0.设计并实现一个Book类,定义义成Book.java,Book 包含书名,作者,出版社和出版日期 1.这些数据 ...

  8. Jupyter-Notebook服务器自定义密码

    往期回顾 Anaconda安装:https://www.cnblogs.com/dotnetcrazy/p/9158715.html 基本知识导航篇:https://www.cnblogs.com/d ...

  9. 生命不息,折腾不止 ~ 旧PC改造之家庭影音

    前言引入 之前把在校园陪伴多年的旧电脑由Win装成了Linux,的确不卡了,基本上日常办公也够了(大项目还是吃不消,日常捣鼓倒是够了),然后把真正的工作游戏本也改成了Linux,那么旧电脑又变成闲置机 ...

  10. css 蒙层

    蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...