我想为Gauss-Seidel实现制作proram。我想在一个JSON上保存每一次迭代。但我遇到了一些麻烦,因为我的代码只将最后一次迭代保存到JSON
import json
iterasi={
"iterasi":None,
"x1":0,
"x2":0,
"x3":0,
}
for x in range (0,11):
iterasi["iterasi"]=x
iterasi["x1"]=6-iterasi["x2"]-iterasi["x3"]
iterasi["x2"]=(2-iterasi["x1"]+iterasi["x3"])/2
iterasi["x3"]=(10-2*iterasi["x1"]-iterasi["x2"])/2
try:
with open("Gauss Siedel.json", "r") as database:
new_data = json.load(database)
except FileNotFoundError:
with open("Gauss Siedel.json", "w") as database:
json.dump(iterasi, database, indent=4)
else:
new_data.update(iterasi)
print(new_data)
with open("Gauss Siedel.json", "w") as database:
json.dump(new_data, database, indent=4)
new_data
是dictionary
,字典可能只有一个关键字iterasi
等,因此它会替换以前的值。
您应该将它们保存为list of dictionares
[{"iterasi": val1, "x1": ... }, {"iterasi":, val2, "x1": ...}, ...].
并将CCD_ 5新字典添加到该列表中。
或者你应该把它们作为dictionary of lists
{"iterasi": [ val1, val2, ... ], "x1": [...], ...}
并将值附加到这些变量。但这需要更多的代码。
使用list of dictionares
的版本
import json
iterasi = {
"iterasi": None,
"x1": 0,
"x2": 0,
"x3": 0,
}
#all_results = []
for x in range(11):
iterasi["iterasi"] = x
iterasi["x1"] = 6-iterasi["x2"]-iterasi["x3"]
iterasi["x2"] = (2-iterasi["x1"]+iterasi["x3"])/2
iterasi["x3"] = (10-2*iterasi["x1"]-iterasi["x2"])/2
try:
print('read')
with open("Gauss Siedel.json", "r") as database:
all_results = json.load(database)
except FileNotFoundError:
print('new list')
all_results = []
finally:
print('append')
all_results.append(iterasi)
print(all_results)
print('write')
with open("Gauss Siedel.json", "w") as database:
json.dump(all_results, database, indent=4)