在Python中制作机器人行走路径[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

所以这个问题是作为课堂测验的结束而给出的。我没有时间测试它,所以我尝试重新编写和测试。然而由于某些原因它不按我想要的方式工作,我不知道为什么。

所以你有一个nxn网格作为列表给出。具有作为元组给出的初始起点的机器人。并且机器人将在列表中以“N”,“S”,“E”,“W”的形式行进的路径。

所以输入会是这样的

make_grid(starting_point, path, size_of_grid)
make_grid((0,0),["S","E","S","S"],4)

输出像

[".","_","_","_"],[".",".","_","_"],["_",".""_""_"],["_",".""_""_"]

在哪里“。”是机器人的起点和行进路径。 “_”是网格的未被划分的区域。如果它撞到边界,它将保持在完全相同的位置。我的问题是结果是它将整个列标记为具有句点的行进路径

def check(coord ,size):
    if ((coord<0) or (coord>size)):
        return True
    else:
        return False


def make_grid(start, path, size):
    n = 0
    row = []
    while (n < size):
        row.append("_")
        n += 1
    n = 1
    grid = [row]
    while ( n < size):
        grid.append(row)
        n +=1

    x = start[0]
    y = start[1]

    grid[x][y] = "."

    n = 0
    while (n < len(path)):
        if (path[n] == "N"):
            x -= 1
            if (check(x,size)):
                x += 1
        elif (path[n] == "E"):
            y += 1
            if (check(y,size)):
                y -= 1
        elif (path[n] == "S"):
            x +=1
            if (check(x,size)):
                x -=1
        elif (path[n] == "W"):
            y -=1
            if (check(y,size)):
                y += 1
        grid[x][y] = "."
        n += 1

    n = 0
    while (n < size):
        print grid[n]
        n += 1
python robot
1个回答
0
投票

您对网格中每一行的初始化是将每一行设置为相同的列表。因此,对网格中元素的任何更改都将更改每一行(因为它们都是相同的列表)。您需要将网格的每个元素设置为单独的对象。就像是:

grid = []
    for i in range(size):
        grid.append([])
        for j in range(size):
            grid[i].append('_')

我相信一个更有经验的Python程序员可以提出更紧凑的初始化。

© www.soinside.com 2019 - 2024. All rights reserved.