鱼C论坛

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

请各位大仙们斧正

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

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

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

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

  12. #定义班级类
  13. class Grade(object):
  14.     def __init__(self, gradename, students, single_number):
  15.         self.gradename = gradename
  16.         self.students = students
  17.         self.single_number = single_number
  18.     #功能:添加
  19.     def add_student(self, stu):
  20.         if stu not in self.students:
  21.             self.students.append(stu.information())
  22.         print("成功添加")

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

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

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

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


  43. s1=Student('1003',"小明",15,"男",70)
  44. s2=Student('1000','小华',15,'男',55)
  45. while True:
  46.     students = [s1,s2]
  47.     g = Grade('1班', students, 0) #创建一个班级对象
  48.     choices = dict(zip([1, 2, 3], ['添加', '展示', '退出'])) #主功能选项
  49.     choice = int(input("添加按1,展示按2,退出按3:"))
  50.     #选择主功能
  51.     if choice == 1: #主功能1:添加
  52.         number = input("学号:")
  53.         name = input("姓名:")
  54.         age = int(input("年龄:"))
  55.         sex = input("性别:")
  56.         score = int(input("成绩:"))
  57.         s = Student(number, name, age, sex, score) #创建一个学生对象
  58.         students.append(s) #在students中新添该学生
  59.         print(g.add_student(s))
  60.         continue
  61.     if choice == 2: #主功能2:展示
  62.         while True:
  63.             show_choices = {0: '展示所有', 1: '特定学号', 2: '不及格', 3: '成绩降序', 4: '退出'} #副功能(展示方面)选项
  64.             show_choice = int(input("展示所有按0,特定学号按1,不及格按2,成绩降序按3,退出按4:"))
  65.             #选择副功能
  66.             if show_choice == 0: #副功能1:展示所有学生信息
  67.                 print(g.show())
  68.             elif show_choice == 1: #副功能2:展示特定学号的学生信息
  69.                 single_number = input("输入特定学号:")
  70.                 g = Grade('1班', students, single_number)
  71.                 print(g.single(g.single_number))
  72.             elif show_choice == 2: #副功能3:展示不及格学生的信息
  73.                 print(g.low())
  74.             elif show_choice == 3: #副功能4:以成绩降序展示所有学生信息
  75.                 print(g.score_low_sort())
  76.             elif show_choice == 4: #副功能5:退出副功能页面
  77.                 break
  78.     if choice == 3: #主功能3:退出
  79.         break
复制代码

有个问题就是添加功能与展示功能是独立的,新添的学生信息在展示里显示不出来,有什么解决办法?怎么优化?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

为了解决这个问题,你可以将创建Grade对象的代码放在循环外面,这样就不会重复创建对象了。另外,你可以将展示功能的选项部分封装成一个函数来调用,这样代码结构会更清晰。下面是优化后的代码:
  1. #定义学生类
  2. class Student(object):
  3.     def __init__(self, number, name, age, sex, score):
  4.         self.number = number
  5.         self.name = name
  6.         self.age = age
  7.         self.sex = sex
  8.         self.score = score
  9.     #整理并打印学生信息
  10.     def information(self):
  11.         print("学号:{},姓名:{},年龄:{},性别:{},成绩:{}".format(self.number, self.name, self.age, self.sex, self.score))
  12. #定义班级类
  13. class Grade(object):
  14.     def __init__(self, gradename, students):
  15.         self.gradename = gradename
  16.         self.students = students
  17.     #功能:添加
  18.     def add_student(self, stu):
  19.         if stu not in self.students:
  20.             self.students.append(stu)
  21.         print("成功添加")
  22.     #功能:展示所有学生信息
  23.     def show(self):
  24.         print(f"班级{self.gradename}的学生如下")
  25.         for stu in self.students:
  26.             stu.information()
  27.     #功能:展示特定学号的学生信息
  28.     def single(self, single_number):
  29.         for stu in self.students:
  30.             if stu.number == single_number:
  31.                 stu.information()
  32.     #功能:展示不及格学生的信息
  33.     def low(self):
  34.         print(f"班级{self.gradename}的不及格学生如下")
  35.         for stu in self.students:
  36.             if stu.score < 60:
  37.                 stu.information()
  38.     #功能:以成绩降序展示所有学生信息
  39.     def score_low_sort(self):
  40.         self.students.sort(key=lambda stu: int(stu.score), reverse=True)
  41.         self.show()
  42. students = [] # 创建一个空的学生列表
  43. while True:
  44.     g = Grade('1班', students) #创建一个班级对象
  45.     choices = {1: '添加', 2: '展示', 3: '退出'} #主功能选项
  46.     choice = int(input("添加按1,展示按2,退出按3:"))
  47.    
  48.     #选择主功能
  49.     if choice == 1: #主功能1:添加
  50.         number = input("学号:")
  51.         name = input("姓名:")
  52.         age = int(input("年龄:"))
  53.         sex = input("性别:")
  54.         score = int(input("成绩:"))
  55.         s = Student(number, name, age, sex, score) #创建一个学生对象
  56.         g.add_student(s) #在students中添加该学生对象
  57.         continue
  58.    
  59.     if choice == 2: #主功能2:展示
  60.         while True:
  61.             show_choices = {0: '展示所有', 1: '特定学号', 2: '不及格', 3: '成绩降序', 4: '退出'} #副功能(展示方面)选项
  62.             show_choice = int(input("展示所有按0,特定学号按1,不及格按2,成绩降序按3,退出按4:"))
  63.             #选择副功能
  64.             if show_choice == 0: #副功能1:展示所有学生信息
  65.                 g.show()
  66.             elif show_choice == 1: #副功能2:展示特定学号的学生信息
  67.                 single_number = input("输入特定学号:")
  68.                 g.single(single_number)
  69.             elif show_choice == 2: #副功能3:展示不及格学生的信息
  70.                 g.low()
  71.             elif show_choice == 3: #副功能4:以成绩降序展示所有学生信息
  72.                 g.score_low_sort()
  73.             elif show_choice == 4: #副功能5:退出副功能页面
  74.                 break
  75.                
  76.     if choice == 3: #主功能3:退出
  77.         break
复制代码

希望这个优化后的代码能解决你的问题并使程序更易读和易用。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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