0

私は、個人的なニーズのために小さな追跡リストを作成することにしました. データを保存および処理するための 2 つのメイン クラスを作成しました。最初のものは、主題と演習リストを表します。2 番目のものは、演習リストからの各演習を表します (主に、すべて (全体) の回答と正しい (良い) 回答の 2 つの変数のみ)。

class Subject:
    def __init__(self, name):
        self.name = name
        self.exercises = []

    def add(self, exc):
        self.exercises.append(exc)

    # here is also "estimate" and __str__ methods, but they don't matter


class Exercise:
    def __init__(self, good=0, whole=20):
        self._good  = good
        self._whole = whole

    def modify(self, good, whole=20):
        self._good  = good
        self._whole = whole

    # here is also "estimate" and __str__ methods, but they don't matter

ディクショナリを定義し、Subject インスタンスを入力して、シェルブ ファイルに転送し、保存しました。

with shelve.open("shelve_classes") as db:
    db.update(initiate())

これが表現です(開始状態):

#Comma splices & Fused sentences (0.0%)
#0/20      0.0%
#0/20      0.0%
#0/20      0.0%
#0/20      0.0%
#0/20      0.0%

その後、ダンプしたファイルを再度開き、いくつかの値を更新しようとしました。

with shelve.open('shelve_classes') as db:
    key = 'Comma splices & Fused sentences'
    sub = db[key]
    sub.exercises[0].modify(18)
    db[key] = sub

よさそうです。確認してみましょう。

print(db[key])

#Comma splices & Fused sentences (18.0%)
#18/20     90.0%
#0/20      0.0%
#0/20      0.0%
#0/20      0.0%
#0/20      0.0%

しかし、ファイルを閉じると、次にファイルを開くと、開始状態に戻り、すべての修正が失われます。ピクルスで試しても、そこでもうまくいきません。データが保存されない理由がわかりません。

4

2 に答える 2