基于用户输入的迷宫移动顺序

Order of movement in a maze based on user input

我正在尝试使用堆栈解决 maze,其中每个移动都存储在 moves 变量中。为了解决它,我需要任意决定从当前位置检查四个方向的可用性的顺序。一种可能的排序是 1) 向上,2) 向下,3) 左和 4) 右。对于不同的运动模式,if 语句应该相应地交换。

有没有更优雅的方法来做到这一点,可以定义 order_of_movement 变量和 not 交换if 语句?

order_of_movement = ['UP', 'DOWN', 'LEFT', 'RIGHT'] #how such a movement list could be used?

if(not moved and validWay[UP]):
    moved, completed, moves = move_up(moves, maze, end)

if(not moved and validWay[DOWN]):
    moved, completed, moves = move_down(moves, maze, end)

if(not moved and validWay[LEFT]):
    moved, completed, moves = move_left(moves, maze, end)

if(not moved and validWay[RIGHT]):
    moved, completed, moves = move_right(moves, maze, end)

既然你澄清了你的 move_up/down/left/right 函数可以通用,下面是解决方案的样子:

for direction in order_of_movement:
    if(not moved and validWay[direction]):
        moved, completed, moves = move_direction(moves, maze, end, direction)

假设您向新的通用 move_direction 函数添加了第四个参数 direction

我在评论字典时的意思是,如果您想将所有移动函数分开,您可以定义方向到函数的映射,如下所示:

order_of_movement = {
    'UP': move_up,
    'DOWN': move_down,
    'LEFT': move_left,
    'RIGHT': move_right
}

for direction in order_of_movement.keys():
    if(not moved and validWay[direction]):
        moved, completed, moves = order_of_movement[direction](moves, maze, end)

因为每个方向都映射到一个函数,这意味着order_of_movement[direction]给了你合适的函数,所以你只需要在末尾加上括号中的参数来调用它。