私は、個人的なニーズのために小さな追跡リストを作成することにしました. データを保存および処理するための 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%
しかし、ファイルを閉じると、次にファイルを開くと、開始状態に戻り、すべての修正が失われます。ピクルスで試しても、そこでもうまくいきません。データが保存されない理由がわかりません。