0
votes

Comment résoudre un labyrinthe de base en utilisant des fonctions en python?

J'essaie d'écrire un code qui résout un labyrinthe de base composé d'une liste de listes avec '#' symbolisant les murs, '.' sont des espaces libres, S est le début et E est la fin. Mon algorithme consiste à vérifier d'abord si l'espace à droite est libre, sinon il vérifie l'espace en haut, puis en bas et enfin à gauche. Je me rends également compte que cela crée un problème s'il y a une impasse, mais je m'en soucierai plus tard. Jusqu'à présent, j'ai un code qui imprime la liste et trouve la valeur d'index du point de départ qui est (2,0). Fondamentalement, ce que j'essaie de faire est de prendre cette valeur de départ comme argument pour ma fonction def résoudre, puis de parcourir mon algorithme tout en marquant les positions visitées comme «x» ... si cela a un sens. Lorsque j'exécute le code, j'obtiens

if maze [r + 1] [c] == '.': NameError: le nom 'r' n'est pas défini

De plus, je n'arrive pas à imprimer correctement mon labyrinthe sur ce site, donc voici mon labyrinthe .

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()


1 commentaires

Vous devez passer start_point à sove () car c'est un argument ou le supprimer comme argument et le laisser défini dans la fonction uniquement.


3 Réponses :


0
votes

L'erreur que vous rencontrez se produit car main appelle résoudre sans argument requis.

def solve():

    start_point = start()

Depuis résoudre code> redéfinit start_point tout de suite, vous pouvez simplement supprimer cet argument requis:

def main():

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

Enfin, vous n'avez pas fourni de labyrinthe code > afin que quiconque essaie de vous aider au-delà de ce problème ne pourra pas


1 commentaires

Merci, j'avais du mal à faire formater mon labyrinthe correctement sur ce site Web, alors j'ai fourni et un lien avec une image si cela aide.



0
votes

Vous devez passer la valeur renvoyée par start () dans la fonction solve () car vous l'avez répertoriée comme argument. Vous pouvez ensuite supprimer la partie start_point = de la fonction solve () .

def main():
    print_maze()
    start = start()
    solve(start)
    print_maze()


0 commentaires

0
votes

Essayez de changer le format def slove, par exemple; == "X" = "x²"


0 commentaires