0

私はここでプロジェクトに取り組んでおり、この次の部分を処理する方法についてかなり混乱しています。プロジェクトの説明が含まれています。

Student クラス: Student クラスには、学生 ID、学生の姓と名、および学生が受講したクラスのコース番号と成績を含む grades という名前の辞書に関する情報が格納されます。学生の ID、名、姓のアクセサ メソッドと、学生の名と姓のミューテータ メソッドを記述します。以下に示すように、Student クラスにはさらに 2 つのメソッドがあります。

  • 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()      

だから、私の質問は本当にです。最初の 2 つのクラスを作成したので、コース名と学生の成績を含む辞書を作成したいと思います。これを行う最善の方法は何ですか?私は途方に暮れており、さまざまな方法を試しましたが成功しませんでした。

4

2 に答える 2

2

なぜコースクラスがあるのですか?問題の何も要求しません。実際、情報をディクショナリとして保存することを指定しています。

アクセサー メソッドの要求には同意しません。これは Java のイディオムであり、Pythonic ではありません。同様に、与えられたメソッド名は、PEP8 とは異なり、javaCase です。

コードは次のようになります。

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

... 最後の 2 つのメソッドは演習として残しておきます ;)

于 2012-07-27T04:15:27.393 に答える
0

ディクショナリは単なるキーと値のマッピングであり、キーを特定の値に関連付けていることを思い出してください。したがって、求められているのは、各学生に、コースの一意の識別子から文字の成績(たとえば文字列として保存)へのマッピングを保存することだけです。辞書はこのタスクに最適なツールです。

そのクラスのインスタンスが変更可能であっても、クラスインスタンスをキーとして使用できることを思い出してください。その理由は、実際にはインスタンス自体がキーとして使用されているのではなく、その一意の識別子(メモリアドレス)であるためです。

Courseただし、コース番号をインスタンスにマップする方法がある方がおそらく適切でしょう。そこにあるキーワードマップに注目してください。また、すべてのコースをリストに保存して、番号でコースを検索するたびに検索を実行することもできますが、それは遅くなります(の場合len(courses) -> Infinity)。

于 2012-07-27T04:19:15.703 に答える