如何将网格作为函数返回?

所以我有一个任务,我必须使用测试代码来检查我的代码是否正常工作,我试图做的是将网格定义为函数并返回它,以便测试代码可以使用它。


测试代码:


def run_test (test):

    if test == 0:

        grid = [] 

        print(grid)   

        util.create_grid (grid)

        # import from a different file

        print (len (grid))

        print (len (grid[0]))

        print (len (grid[1]))

        print (len (grid[2]))

        print (len (grid[3]))

        print (grid[0][0])

        print (grid[1][2])

        print (grid[2][1])

        print (grid[3][3])

我的代码(来自不同的文件):


def create_grid(grid):

  

  grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]

  

  return grid

我收到的错误是:print (len (grid[0])) IndexError: list index out of range


慕森王
浏览 210回答 3
3回答

萧十郎

问题是您忽略了以下的返回值create_grid:grid = util.create_grid(grid)鉴于您grid在重新分配它之前从不使用,将任何对象作为参数传递会更简单(函数无论如何都会忽略它):if test == 0:     grid = util.create_grid([])

呼唤远方

如果所有文件都在您的控制之下并且您可以修改它们,我会看到两个问题:此方法中的参数grid从未使用过。它应该被删除def create_grid(grid):       grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]         return grid永远不会使用返回值。它应该是 grid = util.create_grid()如果你不能修改test_run(),因为那是失控的,你需要找到一种方法来修改数组而无需赋值。在这种情况下,从grid.clear()以确保数组为空。之后使用添加值grid.append()或者grif.extend()

繁花如伊

在你的create_grid()功能中,grid变量只在函数的范围内,所以它只会在你的函数中编辑你的参数。例子:>>> grid = []>>> def create_grid(grid):...     grid = [1, 2, 3]...>>> create_grid(grid)>>> print(grid)[]在这里你可以看到你的grid变量没有改变。你应该做的是在你改变它之后返回你的网格(你已经这样做了)并将grid你的函数中的变量定义run_test()为函数的返回值,如下所示:>>> grid = []>>> def create_grid(grid):...     grid = [1, 2, 3]...     return grid...>>> grid = create_grid(grid)>>> print(grid)[1, 2, 3]这里你的grid变量确实改变了。请注意,在这里您不需要将网格作为参数传递,因为您无论如何都在函数中重新定义它。所以你的代码应该是这样的:def create_grid():  grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]  return gridgrid = util.create_grid()如果您想了解有关范围的更多信息,请参阅此链接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python