以下是我的说明,然后是我的代码。我无法弄清楚如何创建一个空列表来将学生放入(一个名单),然后当然如何从该列表中删除学生。
Course类应该有以下方法:
__init__
获取并存储一个整数课程编号。get_course_number
不接受任何参数并返回整数课程编号。add_student
获取单个字符串学生姓名并将其添加到名单中。drop_student
获取单个字符串学生姓名。如果学生目前在名册中,则会从名单中删除该学生姓名并且不返回任何内容。get_roster
不接受任何参数,并返回一个列表,其中包含按字母顺序在课程中注册的所有学生的姓名。这是我到目前为止所写的:
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))
非常感谢任何见解!
答案 0 :(得分:2)
- init接受并存储一个整数课程编号。
醇>
看起来不错。
- get_course_number不接受任何参数并返回整数课程编号。
醇>
请注意,问题是“返回”但您实际上是“打印”整数课程编号。这意味着如果有人试图使用您的功能询问课程编号是什么,他们会看到它打印在屏幕上,但无法将其分配给变量。你可能想要这样的东西:
return (self.course_number)
- add_student获取单个字符串学生名称并将其添加到名单中。
醇>
此功能目前每次运行时都会创建一个新列表。您应该确保此行在您的init函数中:
self.list=[]
也没有必要设置self.student,如下所示:
self.student= student
这基本上定义了一个特定的学生,即使在该生产线运行之后,该学生当前也是该课程的学生。你也永远不会再使用self.student
,所以这是一条浪费的行。
除此之外,这个功能看起来很好。
- drop_student获取单个字符串学生姓名。如果学生目前在名册中,则会从名单中删除该学生姓名并且不返回任何内容。
醇>
同样,无需指定self.student
。在这里,您要从初始化init函数的self.list中删除学生。这里有两点说明:
确保if语句下的任何代码都缩进。如果我只在你编写的代码中修复它,它将如下所示:
def drop_student(self, student_id):
self.student_id= student_id
if student_id in self.student:
del self.student[student_id]
查找python的“remove”方法。 Here is a good stackoverflow discussion on it
- get_roster不接受任何参数,并返回一个列表,其中包含按字母顺序在课程中注册的所有学生的姓名。
醇>
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
方法。