def insertFromRLE(self, rleString, pad=0):
---
a = 0
while True:
if rleString.split('\n')[a][0] == 'x':
break
a += 1
length = int(rleString.split('\n')[a].split(',')[0][4:])
height = int(rleString.split('\n')[a].split(',')[1][5:])
number = ''
rleGrid = []
row = []
encoder = ''
for line in rleString.split('\n')[(a + 1):]:
encoder += line
for char in encoder:
if char.isdigit():
number += char
elif char == 'b':
if number == '':
number = 1
for _ in range(int(number)):
row.append(0)
number = ''
elif char == 'o':
if number == '':
number = 1
for _ in range(int(number)):
row.append(1)
number = ''
elif char in '$!':
if len(row) < length:
for _ in range(length - len(row)):
row.append(0)
rleGrid.append(row)
row = []
number = ''
if char == '!':
break
for i in range(height):
for j in range(length):
self.grid[i + pad][j + pad] = rleGrid[i][j]
此代码不正确。出于某种原因,“for char in encoder”循环没有迭代足够的次数,导致 rleGrid 太短,在尝试将其内容插入 self.grid 时导致索引错误(这是一个 NxN列表列表,其中 N > 长度或高度)
最奇怪的是,它适用于较小的图案,如 gosper 滑翔机枪 或 124P21,但不适用于稍大的图案,如 Cord Puller 或更大的图案,如 Breeder 1。
我已经问过 ChatGPT,但我无法解决它的“变通办法”以实际正常工作而不抛出另一个错误。