0

我正在这里做一个项目,对于如何处理下一部分感到非常困惑。包括项目描述。

学生班级:学生班级将存储有关学生 id、学生的名字和姓氏的信息,以及一个名为成绩的字典,其中包含学生所学课程的课程编号和字母成绩。您将为学生 ID、名字和姓氏编写访问器方法,并为学生的名字和姓氏编写变异器方法。Student 类中还有两个方法,如下所示。

  • getCourseNumbers():它返回学生所学的课程编号列表。如果学生没有上过任何课程,它会返回一个空列表。
  • getGrade(course_no):返回学生在参数 course_no 标识的课程中获得的成绩。如果未找到给定的课程编号,则此函数返回“Z”来表示。
  • addCourse(course_no,grade):添加一门带有课程编号和成绩的课程
  • updateCourse(course_no,grade):更新现有课程的成绩
  • deleteCourse(course_no):从字典中删除课程。

到目前为止,这是我的代码:

class Course:
    def __init__ (self, __crn, __ch, __ins):
        self.__crn = crn
        self.__ch = ch
        self.__ins = ins

    def coursename(self):
        return self.__crn

    def credithour(self):
        return self.__ch

    def instructor(self):
        return self.__ins

class Student:
    def __init__(self, id, sfirst, slast):
        self.sid = sid
        self.sfirst = sfirst
        self.slast = slast

    def studentid(self):
        return self.sid

    def studentfirst(self):
        return self.sfirst

    def studentlast(self):
        return self.slast

def main():

    course = Course('CSC 1100', '4', 'Name')

    print (course.coursename())
    print (course.credithour())
    print (course.instructor())

main()      

所以,我的问题确实是。现在我已经完成了最初的两个课程,我想创建一个包含课程名称和学生成绩的字典。最好的方法是什么?我有点不知所措,尝试了很多不同的方法,但都没有成功。

4

2 回答 2

2

为什么要开设 Course 课程?问题中没有任何要求;实际上,它指定您要将信息存储为字典。

我不同意访问器方法的请求;这是一个 Java 习惯用法,而不是 Pythonic。同样,给定的方法名称是 javaCase,与 PEP8 相反。

然后代码减少到

class Student(object):
    def __init__(self, id, firstname, lastname, grades=None):
        self.id = id
        self.firstname = firstname
        self.lastname = lastname
        self.grades = {} if grades is None else dict(grades)

    def get_course_numbers(self):
        return self.grades.keys()

    def get_grade(self, course):
        return self.grades.get(course, 'Z')

    def add_course(self, course, grade):
        self.grades[course] = grade

...我将把最后两种方法留作练习;)

于 2012-07-27T04:15:27.393 回答
0

回想一下,字典只是键值映射——它将键与特定值相关联。因此,您所要求的只是为每个学生存储一个从课程的唯一标识符到字母等级的映射(例如存储为字符串)。字典是完成这项任务的绝佳工具。

回想一下,您可以使用类实例作为键,即使该类的实例是可变的。原因是它实际上并不是实例本身被用作键,而是它的唯一标识符(内存地址)。

不过,有一种方法将课程编号映射到Course实例可能更合适。注意到那里的关键字映射了吗?您还可以将所有课程存储在一个列表中,并在每次您想按编号查找课程时进行搜索,但这会很(对于len(courses) -> Infinity)。

于 2012-07-27T04:19:15.703 回答