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

# 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. Codeforces Round #429 Div. 1

    A:甚至连题面都不用仔细看,看一下样例就知道是要把大的和小的配对了. #include<iostream> #include<cstdio> #include<cmath ...

  2. SQL Server查询优化器的工作原理

    SQL Server的查询优化器是一个基于成本的优化器.它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行.实际上,因为查询优化器不可能对每一 ...

  3. HDU5977 Garden of Eden 【FMT】【树形DP】

    题目大意:求有所有颜色的路径数. 题目分析:参考codeforces997C,先利用基的FMT的性质在$O(2^k)$做FMT,再利用只还原一位的特点在$O(2^k)$还原,不知道为什么网上都要点分治 ...

  4. 【XSY2808】董先生的休闲方案 组合数学

    题目描述 有\(n\)个方案,编号为\(1\ldots n\). 最开始你不知道每个方案的编号. 你要按顺序提出这些方案. 每一个时刻你要做以下事情: 如果你阅读过下一个方案,就提出这个方案. 否则随 ...

  5. 【XSY2773】基因 后缀平衡树 树套树

    题目描述 有一棵树,每条边上面都有一个字母.每个点还有一个特征值\(a_i\). 定义一个节点\(i\)对应的字符串为从这个点到根的路径上所有边按顺序拼接而成的字符串\(s_i\). 有\(m\)次操 ...

  6. C#版本和.NET版本以及VS版本的对应关系

    C#版本和.NET版本以及VS版本的对应关系 版本 .NET Framework版本 Visual Studio版本 发布日期 特性 C# 1.0 .NET Framework 1.0 Visual ...

  7. 自学Python4.8-生成器(方式二:生成器表达式)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  8. linux中shell脚本引用另一shell脚本

    调用有三种方法: 1.fork:不同的shell,调用后返回父shell,子shell从父shell中继承变量,但子shell的变量不会带回父shell,直接用path/to/file.sh调用: 2 ...

  9. visual studio 阅读 linux-kernel

    @2018-12-13 [小记] 使用 visual studio 阅读 linux-kernel 方法 a. 文件 ---> 新建 --->从现有代码创建项目 b. 指定项目存储位置,命 ...

  10. Equivalent Sets HDU - 3836 (Tarjan)

    题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...