Как решить основной лабиринт, используя функции в Python? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь написать код, который решает основной лабиринт, состоящий из списка списков с символом '#', обозначающим стены, '.'свободные места, S начало и E конец.Мой алгоритм состоит в том, чтобы сначала проверить, свободно ли пространство справа, если нет, то проверить пространство вверх, затем вниз и, наконец, влево.Я также понимаю, что это создает проблему, если есть тупик, но я буду беспокоиться об этом позже.До сих пор у меня есть код, который печатает список и находит значение индекса начальной точки (2,0).По сути, я пытаюсь принять это начальное значение в качестве аргумента для моей функции def решить, а затем выполнить итерацию по моему алгоритму, пометив посещенные позиции как 'x' ... если это имеет смысл.Когда я запускаю код, я продолжаю получать

if maze[r+1][c] == '.': NameError: name 'r' is not defined

Также я не могу правильно распечатать свой лабиринт на этом сайте, поэтому вот мой лабиринт .

def main():

    print_maze()
    start()
    solve(start())
    print_maze()

def print_maze():

    for r in range(0,len(maze)):
        for c in range(0,len(maze)):
            print(maze[r][c], end='')
        print('')

def start():

    find_value = 'S'
        for r in range(0,len(maze)):
            for c in range (0,len(maze)):
                if find_value in maze[r][c]:
                    return(r,c)
                    break

def solve(position):


    if maze[r+1][c] == '.':  
        maze[r][c] = 'x'
        return (r,c)
    elif maze[r][c+1] == '.':  
        maze[r][c] = 'x'
        return (r,c)     
    elif maze[r][c-1] == '.':  
        maze[r][c] = 'x'
        return (r,c)
    elif maze[r-1][c] == '.':  
        maze[r][c] = 'x'
        return (r,c)
    else:
        print('Route Error')


main()

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Вам необходимо передать значение, возвращенное из start(), в функцию solve(), поскольку вы указали его в качестве аргумента. Затем вы можете удалить часть start_point= из функции solve().

def main():
    print_maze()
    start = start()
    solve(start)
    print_maze()
0 голосов
/ 06 мая 2019

Ошибка, с которой вы сталкиваетесь, возникает из-за того, что main вызывает solve без обязательного аргумента.

def main():

    print_maze()
    start()
    solve() # Error! Missing required arg
    print_maze()

Поскольку solve переопределяет start_point, вы можете просто удалить этот обязательный аргумент:

def solve():

    start_point = start()

Наконец, вы не предоставили maze, поэтому любой, кто попытается помочь вам, кроме этой проблемы, не сможет

...