传送门:
python及pycharm安装配置_pycharm和python配置-CSDN博客
Python学习笔记(一)-CSDN博客
Python学习笔记(二)-CSDN博客
Python学习笔记三(面向对象)-CSDN博客
Python学习笔记四(面向对象)-CSDN博客
前言:在前面两章,我们学习了python的基本概念和一些重要的知识点,由于这个部分非常重要,而代码学习之道最重要的就是自己要动手写代码,所以本章我们停一下脚步,用网上一些比较经典的面向对象的例子,我们来写一下代码,顺便也巩固一下这部分的重点内容。
写一个简易版学生上课系统:
学生具有学号,姓名,所选课程列表,每名学生被随机分配三个课程,一共有6个课程,每个课程对应一个老师来教,课程具有课程编号,课程名称,老师三个信息,老师具有老师工号,老师名称,电话三个信息。要求打印30个学生的选课情况以及任课老师的电话。
接下来我们来一步步分析一下这个题:
首先,我们要明确写几个类,每个类包含什么什么变量和函数。根据题目分析得:我们需要写三个类,分别为学生,老师,课程。
学生类包括学号,姓名,所选课程列表。学号没要求,因为是三十个学生,可以用01-29来代表,名字就对应的用学生0到学生29。(这样比较简单,如果想严谨一些也可以用其他)。课程列表就定义一个列表来存储课程号及对应的课程。
老师同理,写对应的工号和姓名。电话号码是13位且不同,我们可以自己定义,也可以通过随机数来写电话号(这个大家可以自己根据电话号码的特点考虑一下,因为只有6个老师,这里我就直接自己定义了)
课程同理。
接下来写代码:
学生类:
class Student:
def __init__(self,sno,sname):
self.sno = sno #学号
self.sname = sname #姓名
self.cour_list = [] #课程列表
def addcour(self,cour) #添加课程
self.cour_list.append(cour)
def watch(self): #查看课程
for c in self.cour_list:
print(f"{self.sname}选了{self.cname}课程")
这一点提一句print(f" ")
这个语句主要作用就是格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,包含的{}表达式在程序运行时会被表达式的值代替。
(其实这个watch方法在本题的要求中用不到,写这个其实是看起来更符合实际需求。不写也没问题)
这样我们学生类就定义好了,接下来定义课程类
课程类:
class Course:
def __init__(self,cno,cname,teacher = None)
self.cno = cno
self.cname = cname
self.teacher = teacher
def SetTeacher(self,teacher)
self.teacher = teacher
老师类:
class Teacher:
def __init__(self,tno,tname,telephone):
self.tno = tno
self.tname = tname
self.telephone = telephone
三个类创建完毕后,我们需要对学生,老师,课程做初始定义。
对于课程,由于不会更改,我们用元组来存储:
c1 = Course("01", "抽烟")
c2 = Course("02", "喝酒")
c3 = Course("03", "烫头")
c4 = Course("04", "点烟")
c5 = Course("05", "倒酒")
c6 = Course("06", "给人烫头")
老师:
t1 = Teacher("01", "教师1", "13344512821")
t2 = Teacher("02", "教师2", "13701152154")
t3 = Teacher("03", "教师3", "138241865416")
t4 = Teacher("04", "教师4", "13941637063")
t5 = Teacher("05", "教师5", "15141823351")
t6 = Teacher("06", "教师6", "15214135127")
接下来我们需要把老师和课程一一对应起来,需要调用刚才写的方法:
c1.SetTeacher(t1)
c2.SetTeacher(t2)
c3.SetTeacher(t3)
c4.SetTeacher(t4)
c5.SetTeacher(t5)
c6.SetTeacher(t6)
接下来函数主体:
这一大段代码思路其实很简单,我们“长话短说,稍作解释”:
先定义一个名为stu_lst
的空列表,用于存储30个学生对象。在循环中,每次迭代会创建一个新的Student
对象,为了模拟学生随机选择3门课程的过程,代码使用了set
来确保选择的课程索引不重复,并通过randint
生成0-5之间的随机数。
在循环内部,首先创建一个空集合s
,然后用while
循环直到集合元素数量达到3,这时随机的3个课程索引会被添加到集合s
中。接着,遍历这个集合s
,将对应的课程对象(c_lst[n]
)添加到学生对象的cour_list
中。
每创建完一个学生后,就将其添加到stu_lst
列表中。最后,遍历整个stu_lst
,打印每个学生的个人信息(学号和姓名),以及他们所选课程的信息,包括课程编号、课程名称和任课老师的电话。
好了,就是这么简单(坚信)。
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.addcour(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}")
这样我们代码就写完了,总代码:
class Student:
def __init__(self,sno,sname):
self.sno = sno #学号
self.sname = sname #姓名
self.cour_list = [] #课程列表
def addcour(self,cour): #添加课程
self.cour_list.append(cour)
def watch(self): #查看课程
for c in self.cour_list:
print(f"{self.sname}选了{self.cname}课程")
class Course:
def __init__(self,cno,cname,teacher = None):
self.cno = cno
self.cname = cname
self.teacher = teacher
def SetTeacher(self,teacher):
self.teacher = teacher
class Teacher:
def __init__(self,tno,tname,telephone):
self.tno = tno
self.tname = tname
self.telephone = telephone
c1 = Course("01", "抽烟")
c2 = Course("02", "喝酒")
c3 = Course("03", "烫头")
c4 = Course("04", "点烟")
c5 = Course("05", "倒酒")
c6 = Course("06", "给人烫头")
t1 = Teacher("01", "教师1", "13344512821")
t2 = Teacher("02", "教师2", "13701152154")
t3 = Teacher("03", "教师3", "138241865416")
t4 = Teacher("04", "教师4", "13941637063")
t5 = Teacher("05", "教师5", "15141823351")
t6 = Teacher("06", "教师6", "15214135127")
c1.SetTeacher(t1)
c2.SetTeacher(t2)
c3.SetTeacher(t3)
c4.SetTeacher(t4)
c5.SetTeacher(t5)
c6.SetTeacher(t6)
from random import randint
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.addcour(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.telephone}")
大家可以参照这个思路自己写一遍,也可以对这个代码做优化,或者添加一些更符合实际需要的功能,但最重要的是,一定一定要自己写一遍,看懂和自己写出来完全是两个概念。