如何将嵌套列表的字符串转换回嵌套列表?

时间:2015-11-25 05:24:32

标签: python string nested-lists

对不起,如果违反任何规则,这是我第一次在这里发帖。我们正在研究的项目是用Python创建Connect 4。我们目前正在努力解决如何保存和加载游戏的问题。

我们到目前为止所做的是将我们的2D列表保存在.txt文件中并尝试通过阅读来加载游戏。我们遇到的问题是当您尝试读取文件时,它会读取字符串而不是列表。例如:

[['R', 'R', 'Y', 'R', 'Y', 'Y', 'Y'], ['Y', 'Y', 'R', 'R', 'R', 'Y', 'Y'], ['R', 'R', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E']]

将其保存为字符串,我们希望将其转换回用于将保存的点放回原来的位置。

def save():
    global GAME_LIST
    save_file = open("savedGame.txt","w")
    print('Game', GAME_LIST)
    save_file.write(str(GAME_LIST))


#Will basically be the new def main() once you load a file.
def load():
    global PIECES
    savedFile = open("savedGame.txt","r")
    loadedState = savedFile.readline()
    print(loadedState)
    grid()
    PIECES = {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0}

def newRed(column):
    coordinates = {'1': -210, '2': -140, '3': -70, '4': 0, '5': 70,        '6': 140, '7': 210}
    red = turtle.Turtle()
    red.hideturtle()
    red.up()
    #Pieces * Cell length for Y value
    red.goto(coordinates[column], -160 + (PIECES[column] * 70))
    PIECES[column] += 1
    red.dot(60, 'red')

def newYellow(column):
    coordinates = {'1': -210, '2': -140, '3': -70, '4': 0, '5': 70, '6': 140, '7': 210}
    #Computer turtle
    yellow = turtle.Turtle()
    yellow.hideturtle()
    yellow.up()
    yellow.goto(coordinates[column], -160 + (PIECES[column] * 70))
    PIECES[column] += 1
    yellow.dot(60, 'yellow')

def toList(stringState):
    sublist = []
    for characters in stringState:
        sublist.append(characters)
    print(sublist)
    return sublist

def reDot(loadedState):
    global ROW
    global COLUMN
    for sortList in range(ROW):
        newList = loadedState[sortList]
        for sortSubList in range(COLUMN):
            sortSubList = int(sortSubList)
            if newList[sortSubList] == "R":
                newRed(sortSubList + 1)
            elif newList[sortSubList] == "Y":
                newYellow(sortSubList + 1)

newList = toList(loadedState)
reDot(newList)

这是我们的代码片段以供参考。 reDot()应该采用'R'/'Y'的位置并在那里放一个点。

1 个答案:

答案 0 :(得分:1)

如果您想将数据保存到文件中并将其读回来,我认为JSON库对您有所帮助,非常容易使用,这样:

data = [['R', 'R', 'Y', 'R', 'Y', 'Y', 'Y'], ['Y', 'Y', 'R', 'R', 'R', 'Y', 'Y'], ['R', 'R', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E'], ['E', 'E', 'E', 'E', 'E', 'E', 'E']]
with open('game_data.json', 'w') as fp:
                    json.dump(data, fp)

然后当你想要阅读它时:

with open('game_data.json', 'r') as fp:
                data = fp.read()

如果找不到文件或任何其他try-except,您可能还希望使用exception块包含上述代码。