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("", "抽烟")
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 面向对象(经典作业讲解)的更多相关文章
- python面向对象、模块讲解
(1)模块的介绍: 1.什么是模块 模块是一系列功能的集合体 常见的模块形式(自定义模块.第三方模块.内置模块): 1.一个module.py文件就是一个模块,文件名是module.py,而模 ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)
昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ...
- python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)
一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...
- Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)
面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...
- python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
先来回顾一下昨天的内容 黏包现象粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全相 ...
- 第三模块:面向对象&网络编程基础 第3章 选课系统作业讲解
01-选课系统作业讲解1 02--选课系统作业讲解2 03-选课系统作业讲解3 04--选课系统作业讲解4 01-选课系统作业讲解1 02--选课系统作业讲解2 03-选课系统作业讲解3 04--选课 ...
- Python 的经典入门书籍
实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都 ...
- python入门经典_好资源送不停
Python入门经典(2K超清_送书) https://study.163.com/course/courseMain.htm?courseId=1006183019&share=2& ...
随机推荐
- Android Dialog 简单封装
转载:https://www.cnblogs.com/zjjne/archive/2013/10/03/3350382.html public class MyAlertDialog { //regi ...
- requests简单应用
requests发送get请求 无参数的get请求: response = requests.get(url='http://ws.webxml.com.cn/WebServices/WeatherW ...
- Python_sys.argv 命令行参数获取使用方法
import sys print(sys.argv) """ 获取命令行参数 输入 python3 sys.argv_demo.py 输出: ['argv.py'] 输入 ...
- eclipse 保存html 提示 save could not be completed
重启ecplise 即可
- MT【267】第一次很重要
\begin{equation*}\textbf{已知}x_1,x_2<\pi,x_{n+1}=x_n+\left\{ \begin{aligned} sin x_n &,x_n> ...
- Qt Creator 搭配Git 版本控制
再次介绍一下Git的使用,这次是在Coding.net上部署项目的.这个是写给大作业合作的小伙伴们(我和我的A奶朋友们和某A的男朋友)看的. 安装Git 首先安装Git(msysGit) 下载地址 h ...
- BZOJ 2728: [HNOI2012]与非(位运算)
题意 定义 NAND(与非)运算,其运算结果为真当且仅当两个输入的布尔值不全为真,也就是 A NAND B = NOT(A AND B) ,运算位数不会超过 \(k\) 位, 给你 \(n\) 个整数 ...
- Codeforces Round #471 (Div. 2) F. Heaps(dp)
题意 给定一棵以 \(1\) 号点为根的树.若满足以下条件,则认为节点 \(p\) 处有一个 \(k\) 叉高度为 \(m\) 的堆: 若 \(m = 1\) ,则 \(p\) 本身就是一个 \(k\ ...
- 【BZOJ5304】[HAOI2018]字串覆盖(后缀数组,主席树,倍增)
[BZOJ5304][HAOI2018]字串覆盖(后缀数组,主席树,倍增) 题面 BZOJ 洛谷 题解 贪心的想法是从左往右,能选就选.这个显然是正确的. 题目的数据范围很好的说明了要对于询问分开进行 ...
- 「洛谷5290」「LOJ3052」「十二省联考 2019」春节十二响【启发式合并】
题目链接 [洛谷传送门] [LOJ传送门] 题目大意 给定一棵树,每次选取树上的一个点集,要求点集中的每个点不能是另一个点的祖先,选出点集的代价为点集中权值最大点的权值,问将所有点都选一遍的最小代价为 ...