Python-Person对象及其扩展列表

Python-Person对象及其扩展列表,python,list,function,class,oop,Python,List,Function,Class,Oop,我正在研究Python中的类和OOP结构,试图解决以下问题: 给定表单的文本文件: Name: [someName] Course: [someCourse] Name: [someName] Course: [someCourse] ... 包含学生的[姓名]和该学生所修的[课程] 学生。我们假设没有两名学生同名,因此: Name: Anderson Course: Biology Name: Peter Course: History

我正在研究Python中的类和OOP结构,试图解决以下问题:

给定表单的文本文件:

Name: [someName]        Course: [someCourse]
Name: [someName]        Course: [someCourse]
...
包含学生的[姓名]和该学生所修的[课程] 学生。我们假设没有两名学生同名,因此:

Name: Anderson      Course: Biology
Name: Peter         Course: History
Name: Anderson      Course: Mathematics
表明安德森同时学习生物学和数学

问题

  • 读取输入文件
  • 提取学生姓名和课程
  • 打印出特定学生所修课程的摘要
例如,基于上述示例文件的结果应该 生成:

Student: Anderson
Courses: Biology
         Mathematics

Student: Peter
Courses: History
到目前为止我所拥有的

我已经能够阅读该文件并提取有关姓名和课程的信息。我已将这些值添加到两个列表(数组),学生名称学生课程。根据上面的示例文本文件,这将产生以下列表:

student_name = ["Anderson", "Peter", "Anderson"]
student_course = ["Biology", "History", "Mathematics"]
这意味着索引对应。也就是说,位于学生名[i]的学生参加位于学生课程[i]的课程

我还有一个学生班,结构如下:

class Student(object):
    #Variables here
    student_list = [] #empty list of students

    def __init__(self, name, course):
        self.name = name
        self.course = course

    def check_student(self, name, course):
        """ 
            Checks if student (given by name) is already in student list.
            Function already_exists() works! 
        """
        if(self.already_exists(self.name) == false): #If not in list
            self.student_list.append(self.name) #Add student to list
            ##### NEED help HERE ####
            #Add course to already existing Student. 
        else:
            ##### NEED help HERE ####
            #Create student + add course. 
这个想法是通过学生名学生课程列表循环更新学生信息。也就是说,如果遇到新名称:将其添加到学生列表中,并记下课程。相反,如果名称已经存在:只需将课程添加到学生

问题


非常感谢您对我如何将课程添加到现有学生对象或创建新学生的任何帮助

与在学生班上列出学生名单相比,我认为你最好有一个单独的“学生”班

学生类可以维护学生名到学生实例的映射

然后,每个学生实例可以单独负责维护其课程名称列表


根据所需的输出顺序,您可能还希望在Students类上维护一个Student实例数组。但是,如果给定一个学生姓名,映射仍然有助于高效地查找学生实例,而不是在学生类上有一个学生列表,我认为最好有一个单独的“学生”类

学生类可以维护学生名到学生实例的映射

然后,每个学生实例可以单独负责维护其课程名称列表


根据所需的输出顺序,您可能还希望在Students类上维护一个Student实例数组。但是,如果给定一个学生名,映射对于高效查找学生实例仍然很有用

Students类可以维护一个学生名到学生实例的映射。在这种情况下,为什么不只做一个单独的dict,而不让学生按照问题的措辞,我怀疑他们想按照输入中名字出现的顺序输出。因此,保持学生数组的添加顺序将使生成最终输出更容易。也就是说,让学生作为一个班级可能有点过头了,除非你想和多组学生打交道,谢谢。然而,我的字典在提供两个列表时,似乎忽略了一对元素。我有列表:学生名=[“Anderson”,“Peter”,“Anderson”,“Bastian”]课程名=[“生物学”,“历史”,“数学”,“历史]当使用for循环并分配我的dict[学生名[I]]=课程名[I]时,最终结果忽略这一对(Anderson/生物学)。为什么?字典是一个键和一个值之间的映射。在字典中,每个键都是唯一的,因此,当您第二次将值“Math”指定给键“Anderson”时,您将覆盖“Biology”的第一个值“。这就是为什么键应该是学生名,而值应该是学生的实例。学生应该是一个由名字和课程列表组成的班级。然后,在迭代名称和课程列表时,应该创建一个实例(如果该实例不存在),而不是为该值赋值。否则,应将其添加到现有的Student实例中。Students类可以维护Student name到Student实例的映射。在这种情况下,为什么不只做一个单独的dict,而不让学生按照问题的措辞,我怀疑他们想按照输入中名字出现的顺序输出。因此,保持学生数组的添加顺序将使生成最终输出更容易。也就是说,让学生作为一个班级可能有点过头了,除非你想和多组学生打交道,谢谢。然而,我的字典在提供两个列表时,似乎忽略了一对元素。我有列表:学生名=[“Anderson”,“Peter”,“Anderson”,“Bastian”]课程名=[“生物学”,“历史”,“数学”,“历史]当使用for循环并分配我的dict[学生名[I]]=课程名[I]时,最终结果忽略这一对(Anderson/生物学)。为什么?字典是一个键和一个值之间的映射。在字典中,每个键都是唯一的,因此,当您第二次将值“Math”指定给键“Anderson”时,您将覆盖“Biology”的第一个值“。这就是为什么键应该是学生名,而值应该是学生的实例。学生应该是一个由名字和课程列表组成的班级。然后,在迭代名称和课程列表时,应该创建一个实例(如果该实例不存在),而不是为该值赋值,否则应将其添加到现有的Student实例中。