"""
Read the description of subclass StudentRoster below, and then add a str method,
including a docstring, to subclass StudentRoster. You do not need examples for
this docstring. Your str method will be used to display the list of students.

Assume PatientRoster.add() takes a list in the form [student number, surname,
given name] where student number is an int.

Context: a student records system like ROSI.
A course roster has students names in it. Each student is identified by a unique
student number. Students are allowed to add and drop the course, in which case
they must be added or dropped from the course roster. We need to be able to
display a list of all students in the course, where each line has the format:
Surname: <surname>, Given name: <given name>, Student number: <student number>
"""


class Roster:
    """
    Represents a roster of members.
    @param dict members: represents this roster’s members
    """
    def __init__(self):
        """
        Initialize new roster self.
        @param Roster self: this Roster
        @rtype: None
        """
        self.members = {}

    def add(self, member):
        """
        Add member to roster self.
        @param Roster self: this Roster
        @param tuple member: member record to add
        @rtype: None
        Assume:
        -- member is a tuple with member[0] not in self.members,
        -- len(member) > 1
        """
        self.members[member[0]] = member[1:]

    def remove(self, member):
        """
        Remove member from roster self.
        @param Roster self: this Roster
        @param tuple member: member record to be removed
        @rtype: None
        Assume:
        --member is a tuple with member[0] in self.members
        --len(member) > 1
        """
        del(self.members[member[0]])

    def __str__(self):
        """
        Return a string representation of the members of roster self.
        @param Roster self: this Roster
        @rtype: str
        """
        raise NotImplementedError

class StudentRoster(Roster):
    """
    Represents a roster of patients.
    """

    def __str__(self):
        """
        Return a string representation of the members of StudentRoster self.
        @param StudentRoster self: this Roster
        @rtype: str
        """
        ret_str = ""
        for stuno in self.members:
            (surname, given) = self.members[stuno]
            ret_str += ("Surname: {}, Given name: {}, " +
                        "Student number: {}").format(surname, given, str(stuno))
            
        return ret_str
