Question: === Module Description === This file contains classes that describe a university course and the students who are enrolled in these courses. from __future__
=== Module Description === This file contains classes that describe a university course and the students who are enrolled in these courses. """ from __future__ import annotations from typing import TYPE_CHECKING, List, Tuple, Optional if TYPE_CHECKING: from survey import Answer, Survey, Question def sort_students(lst: List[Student], attribute: str) -> List[Student]: """ Return a shallow copy ofsorted by === Precondition === is a attribute name for the Student class >>> s1 = Student(1, 'Misha') >>> s2 = Student(2, 'Diane') >>> s3 = Student(3, 'Mario') >>> sort_students([s1, s3, s2], 'id') == [s1, s2, s3] True >>> sort_students([s1, s2, s3], 'name') == [s2, s3, s1] True """ return sorted(lst, key=lambda s: getattr(s, attribute)) class Student: """ A Student who can be enrolled in a university course. === Public Attributes === id: the id of the student name: the name of the student === Representation Invariants === name is not the empty string """ id: int name: str def __init__(self, id_: int, name: str) -> None: """ Initialize a student with name and id """ self.id_ = id self.name = name self.question_answer: {Question: Answer} = {} def __str__(self) -> str: """ Return the name of this student """ return self.name def has_answer(self, question: Question) -> bool: """ Return True iff this student has an answer for a question with the same id as and that answer is a valid answer for . """ return question in self.question_answer def set_answer(self, question: Question, answer: Answer) -> None: """ Record this student's answer to the question . """ self.question_answer[question] = answer def get_answer(self, question: Question) -> Optional[Answer]: """ Return this student's answer to the question . Return None if this student does not have an answer to """ if question in self.question_answer: return self.question_answer[question] else: return None class Course: """ A University Course === Public Attributes === name: the name of the course students: a list of students enrolled in the course === Representation Invariants === - No two students in this course have the same id - name is not the empty string """ name: str students: List[Student] def __init__(self, name: str) -> None: """ Initialize a course with the name of . """ self.name = name self.students = [] def enroll_students(self, students: List[Student]) -> None: """ Enroll all students in in this course. If adding any student would violate a representation invariant, do not add any of the students in to the course. """ # TODO: complete the body of this method def all_answered(self, survey: Survey) -> bool: """ Return True iff all the students enrolled in this course have a valid answer for every question in . """ # TODO: complete the body of this method def get_students(self) -> Tuple[Student, ...]: """ Return a tuple of all students enrolled in this course. The students in this tuple should be in order according to their id from lowest id to highest id. Hint: the sort_students function might be useful """ # TODO: complete the body of this method if __name__ == '__main__': import python_ta python_ta.check_all(config={'extra-imports': ['typing', 'survey']})
complete the "TODO"s for the functions that have it please
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
