鱼C论坛

 找回密码
 立即注册
查看: 608|回复: 1

请各位大仙们斧正

[复制链接]
发表于 2023-12-26 02:57:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近编了一个小程序,代码如下:
#定义学生类
class Student(object):
    def __init__(self, number, name, age, sex, score):
        self.number = number
        self.name = name
        self.age = age
        self.sex = sex
        self.score = score
    #整理并打印学生信息
    def information(self):
        print("学号:{},姓名:{},年龄:{},性别:{},成绩:{}".format(self.number, self.name, self.age, self.sex, self.score))

#定义班级类
class Grade(object):
    def __init__(self, gradename, students, single_number):
        self.gradename = gradename
        self.students = students
        self.single_number = single_number
    #功能:添加
    def add_student(self, stu):
        if stu not in self.students:
            self.students.append(stu.information())
        print("成功添加")

    #功能:展示所有学生信息
    def show(self):
        print(f"班级{self.gradename}的学生如下")
        for stu in self.students:
            stu.information()

    #功能:展示特定学号的学生信息
    def single(self, single_number):
        for stu in self.students:
            if stu.number == self.single_number:
                stu.information()

    #功能:展示不及格学生的信息
    def low(self):
        print(f"班级{self.gradename}的不及格学生如下")
        for stu in self.students:
            if stu.score < 60:
                stu.information()

    #功能:以成绩降序展示所有学生信息
    def score_low_sort(self):
        self.students.sort(key=lambda stu: int(stu.score), reverse=True)
        self.show()


s1=Student('1003',"小明",15,"男",70)
s2=Student('1000','小华',15,'男',55)
while True:
    students = [s1,s2]
    g = Grade('1班', students, 0) #创建一个班级对象
    choices = dict(zip([1, 2, 3], ['添加', '展示', '退出'])) #主功能选项
    choice = int(input("添加按1,展示按2,退出按3:"))
    #选择主功能
    if choice == 1: #主功能1:添加
        number = input("学号:")
        name = input("姓名:")
        age = int(input("年龄:"))
        sex = input("性别:")
        score = int(input("成绩:"))
        s = Student(number, name, age, sex, score) #创建一个学生对象
        students.append(s) #在students中新添该学生
        print(g.add_student(s))
        continue
    if choice == 2: #主功能2:展示
        while True:
            show_choices = {0: '展示所有', 1: '特定学号', 2: '不及格', 3: '成绩降序', 4: '退出'} #副功能(展示方面)选项
            show_choice = int(input("展示所有按0,特定学号按1,不及格按2,成绩降序按3,退出按4:"))
            #选择副功能
            if show_choice == 0: #副功能1:展示所有学生信息
                print(g.show())
            elif show_choice == 1: #副功能2:展示特定学号的学生信息
                single_number = input("输入特定学号:")
                g = Grade('1班', students, single_number)
                print(g.single(g.single_number))
            elif show_choice == 2: #副功能3:展示不及格学生的信息
                print(g.low())
            elif show_choice == 3: #副功能4:以成绩降序展示所有学生信息
                print(g.score_low_sort())
            elif show_choice == 4: #副功能5:退出副功能页面
                break
    if choice == 3: #主功能3:退出
        break
有个问题就是添加功能与展示功能是独立的,新添的学生信息在展示里显示不出来,有什么解决办法?怎么优化?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 02:58:07 | 显示全部楼层
在代码中,添加功能和展示功能之间确实是独立的。这是因为你在每次选择展示功能时,又重新创建了一个Grade对象,并没有使用你之前创建的g对象,所以添加的学生信息无法显示出来。

为了解决这个问题,你可以将创建Grade对象的代码放在循环外面,这样就不会重复创建对象了。另外,你可以将展示功能的选项部分封装成一个函数来调用,这样代码结构会更清晰。下面是优化后的代码:
#定义学生类class Student(object):    def __init__(self, number, name, age, sex, score):        self.number = number        self.name = name        self.age = age        self.sex = sex        self.score = score    #整理并打印学生信息    def information(self):        print("学号:{},姓名:{},年龄:{},性别:{},成绩:{}".format(self.number, self.name, self.age, self.sex, self.score))#定义班级类class Grade(object):    def __init__(self, gradename, students):        self.gradename = gradename        self.students = students    #功能:添加    def add_student(self, stu):        if stu not in self.students:            self.students.append(stu)        print("成功添加")    #功能:展示所有学生信息    def show(self):        print(f"班级{self.gradename}的学生如下")        for stu in self.students:            stu.information()    #功能:展示特定学号的学生信息    def single(self, single_number):        for stu in self.students:            if stu.number == single_number:                stu.information()    #功能:展示不及格学生的信息    def low(self):        print(f"班级{self.gradename}的不及格学生如下")        for stu in self.students:            if stu.score < 60:                stu.information()    #功能:以成绩降序展示所有学生信息    def score_low_sort(self):        self.students.sort(key=lambda stu: int(stu.score), reverse=True)        self.show()students = [] # 创建一个空的学生列表while True:    g = Grade('1班', students) #创建一个班级对象    choices = {1: '添加', 2: '展示', 3: '退出'} #主功能选项    choice = int(input("添加按1,展示按2,退出按3:"))        #选择主功能    if choice == 1: #主功能1:添加        number = input("学号:")        name = input("姓名:")        age = int(input("年龄:"))        sex = input("性别:")        score = int(input("成绩:"))        s = Student(number, name, age, sex, score) #创建一个学生对象        g.add_student(s) #在students中添加该学生对象        continue        if choice == 2: #主功能2:展示        while True:            show_choices = {0: '展示所有', 1: '特定学号', 2: '不及格', 3: '成绩降序', 4: '退出'} #副功能(展示方面)选项            show_choice = int(input("展示所有按0,特定学号按1,不及格按2,成绩降序按3,退出按4:"))            #选择副功能            if show_choice == 0: #副功能1:展示所有学生信息                g.show()            elif show_choice == 1: #副功能2:展示特定学号的学生信息                single_number = input("输入特定学号:")                g.single(single_number)            elif show_choice == 2: #副功能3:展示不及格学生的信息                g.low()            elif show_choice == 3: #副功能4:以成绩降序展示所有学生信息                g.score_low_sort()            elif show_choice == 4: #副功能5:退出副功能页面                break                    if choice == 3: #主功能3:退出        break
希望这个优化后的代码能解决你的问题并使程序更易读和易用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表