用Python制作机器人行走路径

时间:2017-12-21 01:00:40

标签: python robot

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

所以你有一个以列表形式给出的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

1 个答案:

答案 0 :(得分:0)

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

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

我确信一位经验丰富的Python程序员可以提供更紧凑的初始化。