【问题标题】:Python 3 Classes and DictionaryPython 3 类和字典
【发布时间】:2012-07-27 03:06:23
【问题描述】:

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

学生班级:学生班级将存储有关学生 ID、学生的名字和姓氏的信息,以及一个名为 Grades 的字典,其中包含学生所学课程的课程编号和字母成绩。您将为学生 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()      

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

【问题讨论】:

  • 我怀疑这是作业。如果是这样,请标记它。
  • 你应该发布一些你尝试过但没有成功的小例子,而不是那些有效的代码。
  • 你的代码在运行时会抛出 NameError,我想。这是你得到的吗?
  • 代码运行正确,输出正确。我遇到的问题是实现将包含课程名称和字母等级的字典。之前,我试图通过使用 dictionary = {Course.coursename():var} 来引入字典信息,其中 var 是用户输入 - 虽然,在意识到 Course 类必须有私有成员之后,这种方式不会工作。
  • 我真希望如果他们教 Python,他们会正确地教它......不像它是 Java。

标签: python list class dictionary


【解决方案1】:

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

我不同意访问器方法的请求;这是一个 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

...我将把最后几个方法留作练习;)

【讨论】:

  • 作业的另一部分可能要求参加课程。是的,访问器和修改器在 Python 中基本上是多余的,但它们确实有它们的用途。另外,如果作业要求他们,我不会尝试违反要求。
  • 它确实要求一个包含课程名称、学分和讲师姓名的课程。我的问题确实是我不确定如何使用该课程课程来实现您所做的事情。最初,我的内容与您发布的内容非常相似,但我不确定如何处理所涉及的课程。
【解决方案2】:

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

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

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

【讨论】:

  • 这是一个很好的描述,我在理论上理解了这个概念。键是标识符,而后面的项目是值本身。不过,我不确定如何将课程名称映射到位于 Student 中的字典。
  • 在处理 Student 内部的 course->grade 字典时,您可以使用 Course 实例作为键(因为在 Python 中,everything 通过引用复制,除非您通过copy 模块的值),或者您可以使用课程编号字符串作为键以及单独的全局字典将课程编号字符串映射到课程实例。这些只是想法;由于这是作业,您选择的实际方法完全取决于您。
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
相关资源
最近更新 更多