请耐心等待,我是编程新手。 在我的 Paint 克隆中尝试实现基本的保存和加载功能时,我遇到了一个错误喜剧。
在我的 Paint 克隆中,像素网格存储为 100 个列表的列表,每个列表有 100 个元组代表每个给定像素的 RGB 颜色值。我正在尝试实现将当前状态的网格保存和加载到 .txt 文件的功能。
save_grid
函数的当前实现如下所示:
def save_grid(grid, filename):
with open(filename, 'w') as file:
for row in grid:
row_str = ','.join(str(value) for value in row)
file.write(row_str + '\n')
这按预期工作并在网格中的每一行之后保存由换行符分隔的元组字符串,这样 save.txt 文件如下所示: (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255) (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255) (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255)... ETC 保存空白的白色网格时。 我当前的负载网格功能实现如下所示:
def load_grid(filename):
with open(filename, 'r') as f:
lines = f.readlines()
lines = [line.strip() for line in lines]
rows = [line.split(',') for line in lines]
grid = [[tuple(map(int, value.split())) for value in row] for row in rows]
return grid
这会引发错误,因为它尝试更改为整数的第一个值是“(255”。我尝试重新编写这两个函数来解决这个问题,添加一个“.replace(”(“”).replace( “)”、“”)' 和其他一些。每次我似乎都会引起一个新问题。我没有看到这个实现的简单解决方案吗?我应该完全重做吗?
我想你可以把它改成
map(int,value.strip("()").split(","))
或者只是做
ast.literal_eval(value)
或者您可以更改为更标准的序列化
你可以用逗号分隔每一行。然后按如下方式以三组为一组处理生成的标记:
def load_grid(filename):
grid = []
with open(filename) as t:
for line in map(str.rstrip, t):
row = []
tokens = line.split(',')
for g in zip(tokens[::3], tokens[1::3], tokens[2::3]):
m = map(int, map(lambda x: x.strip('()'), g))
row.append(tuple(m))
grid.append(row)
return grid