使用Python中的类创建课程

时间:2017-09-21 21:06:54

标签: python python-3.x

以下是我的说明,然后是我的代码。我无法弄清楚如何创建一个空列表来将学生放入(一个名单),然后当然如何从该列表中删除学生。

Course类应该有以下方法:

  1. __init__获取并存储一个整数课程编号。
  2. get_course_number不接受任何参数并返回整数课程编号。
  3. add_student获取单个字符串学生姓名并将其添加到名单中。
  4. drop_student获取单个字符串学生姓名。如果学生目前在名册中,则会从名单中删除该学生姓名并且不返回任何内容。
  5. get_roster不接受任何参数,并返回一个列表,其中包含按字母顺序在课程中注册的所有学生的姓名。
  6. 这是我到目前为止所写的:

    class Course(object):
    
        def __init__(self,course_number):
             self.course_number = int(course_number)
    
        def get_course_number(self):
             print (self.course_number)
    
        def add_student(self, student):
            self.list=[]
            self.student= student
            self.list.append(student)
    
        def drop_student(self, student_id):
            self.student_id= student_id
            if student_id in self.student:
            del self.student[student_id]
    
        def get_roster(self):
            print (sorted(self.student))
    

    非常感谢任何见解!

3 个答案:

答案 0 :(得分:2)

  
      
  1. init接受并存储一个整数课程编号。
  2.   

看起来不错。

  
      
  1. get_course_number不接受任何参数并返回整数课程编号。
  2.   

请注意,问题是“返回”但您实际上是“打印”整数课程编号。这意味着如果有人试图使用您的功能询问课程编号是什么,他们会看到它打印在屏幕上,但无法将其分配给变量。你可能想要这样的东西:

return (self.course_number)
  
      
  1. add_student获取单个字符串学生名称并将其添加到名单中。
  2.   

此功能目前每次运行时都会创建一个新列表。您应该确保此行在您的init函数中:

self.list=[]

也没有必要设置self.student,如下所示:

self.student= student

这基本上定义了一个特定的学生,即使在该生产线运行之后,该学生当前也是该课程的学生。你也永远不会再使用self.student,所以这是一条浪费的行。

除此之外,这个功能看起来很好。

  
      
  1. drop_student获取单个字符串学生姓名。如果学生目前在名册中,则会从名单中删除该学生姓名并且不返回任何内容。
  2.   

同样,无需指定self.student。在这里,您要从初始化init函数的self.list中删除学生。这里有两点说明:

  1. 确保if语句下的任何代码都缩进。如果我只在你编写的代码中修复它,它将如下所示:

    def drop_student(self, student_id):
        self.student_id= student_id
        if student_id in self.student:
             del self.student[student_id]
    
  2. 查找python的“remove”方法。 Here is a good stackoverflow discussion on it

  3.   
        
    1. get_roster不接受任何参数,并返回一个列表,其中包含按字母顺序在课程中注册的所有学生的姓名。
    2.   

    self.student不是学生名单,但如果是,那么你的代码就是对的。确保使用您应该在init函数中初始化的学生列表。

答案 1 :(得分:0)

我认为这就是你需要的,只是一些改变:

class Course(object):

    def __init__(self,course_number):
        self.course_number = int(course_number)
        self.students = []

    def get_course_number(self):
         print (self.course_number)

    def add_student(self, student_id):
        self.students.append(student_id)

    def drop_student(self, student_id):
        if student_id in self.students:
            self.students.remove(student_id)

    def get_roster(self):
        print (sorted(self.students))

    def show_students(self):
        print self.students

以下是shell中的示例:

>>> from stack import Course
>>> course = Course(2)
>>> course.add_student(1)
>>> course.add_student(3)
>>> course.show_students()
[1, 3]
>>> course.drop_student(3)
>>> course.show_students()
[1]
>>> course.add_student(5)
>>> course.show_students()
[1, 5]
>>> course.get_roster()
[1, 5]

答案 2 :(得分:0)

到目前为止,你做得很好。你犯的主要错误是add_student你写过:

def add_student(self, student):
    self.list=[]
    self.student= student
    self.list.append(student)

这里self.list显然是代表"名单"。不幸的是,正如您所看到的,每次调用add_student时,您都会设置"名单"到一个空列表。

不要在那里创建名单,只需在__init__函数中创建一个空名单:

def __init__(self,course_number):
    self.course_number = int(course_number)
    self.roster = [] 

此列表将用于存储学生。现在你add_student是直截了当的:只需附加到名单上:

def add_student(self, student):
    self.roster.append(student)

要指出的另一个问题。您的要求声明您返回课程编号和已排序的学生列表,但您实际上并不这样做,而是打印出来。不要使用print,而是使用return(并记住get_roster应该返回包含重复项的roster

drop_student现在应该很容易做到。您获得了学生姓名,只需将其从roster中删除即可,为此您可以在列表中使用remove方法。