0

__dict__ 関数を使用せずに、既存の値をクラスの辞書に変換する必要があります。詳細は以下。


現在の出力は以下のようになります (全レコードの一部のみ、これは単なる例です):

Abair, 131 Laconia St, 7, PHYS271:C|CHEM271:C|MUSC101:A|ANTA321:B
Babeau, 60 Parker St, 8, GERM111:B|COM432:A|ENGR251:C
Babin, 44 Griggs Rd, 9, MECH312:D|MATH142C|GEOG108:B

必要なのは、コースとグレードのペアの辞書形式でのこの出力です。

Babeau, 60 Parker St, 8, {GERM111:B, COM432:A, ENGR251:C}

私のクラスは以下です。Class Student は Class Person のサブクラスです。

class Person(object):

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

    def get_name(self):
        return self.name

    def get_address(self):
        return self.address

    def greet(self):
        print "Hello, my name is " + self.name

    def print_person(self):
        print self.name, self.address

class Student(Person):

    next_id = 0          # A unique ID for each student

    def __init__(self, name, address, record):
        Person.__init__(self, name, address)
        Student.next_id += 1
        self.id = Student.next_id   
        self.record = record

    def get_id(self):
        return self.id

    def add_to_record(self, semester_grades):
        self.record += semester_grades

    def get_record(self):
        return self.record

    def greet(self):
        print "How's it going? I'm " + self.name


    def print_person(self):
        grades = str(self.record)
        print "%s, %s, %i, %s" % (self.name, self.address, self.id, grades)

ディクショナリの作成手順は次のとおりです。__dict__ 関数の使用は許可されていないと思います。

各学生の辞書に既存の値を追加し、追加の course:grade ペアを追加できるコードを作成します。ディクショナリを作成する限り、ファイル内のデータはすでにコース (キー):グレード(値) のペアになっているため、ディクショナリの作成はかなり簡単です。split を使用してペアを取得し、もう一度 2 つの部分を取得して辞書を作成します。したがって、生徒ごとに、イニシャライザ (__init__) 関数で空の辞書を作成し、次に course:grade ペアを分割し、成績追加メソッドを使用してそれらを生徒オブジェクトに追加します。次に、add、change、および retrieve メソッドを使用するコードを記述します。」

そのような辞書を作成する方法はまだわかりません。

4

1 に答える 1

0

クラス/グレードの文字列を辞書に分割したい場合、次のようにします。

s = "PHYS271:C|CHEM271:C|MUSC101:A|ANTA321:B"
d = dict(x.split(':') for x in s.split('|'))

>>> d
{'CHEM271': 'C', 'MUSC101': 'A', 'PHYS271': 'C', 'ANTA321': 'B'}
于 2013-04-03T03:50:51.827 に答える