Trouver la sortie

Messages : 0

Inscription : 31 oct. 2016 11:47

Profil de l'utilisateur : Élève de lycée

Trouver la sortie

Message par prépa1002 » 12 févr. 2017 11:09

Bonjour,
j'ai le labyrinthe suivant et je dois tracer le chamin qui mène à la sortie :
Laby.png
Laby.png (18.37 Kio) Consulté 1550 fois
J'ai écrit la fonction suivante dans laquelle je crée en fait une matrice de 0 et je regarde à partir de la case départ quel est la case libre disponible, la plus proche et je m'y engouffre, en ajoutant les coordonnées dans la liste chemin. Chaque case visité et marqué d'un 1 et ne peut être revisité. Si j'arrive sur une impasse je reviens en arrière en supprimant les coordonnées de la case de la liste chemin mais la case reste marqué d'un 1 donc en revenant sur mes pas je suis sûre de retrouver une case valide. Seulement, il semble qu'il y ait une erreur dans ma fonction, le message suivant s'inscrit "unindent does not match any outer indentation level".
Je n'arrive pas à détecter mon erreur serait il possible de m'aider?
Merci d'avance

from pylab import *
L=imread("labyrinthe.png")
imshow(L,interpolation='none')
show()

couloirs = zeros((49,49))
for i in range (len(L)):
for j in range(len(L)):
if L[i,j,0] == 1 and L[i,j,1]==1 and L[i,j,2]==1:
couloirs[i,j]=1
if L[i,j,0] == 1 and L[i,j,1]==0 and L[i,j,2]==0:
couloirs[i,j]=1
depart = [i,j]
arrivee=[48,47]
chemin=[depart]
cheminpossible = zeros((49,49))
cheminpossible[départ]=1
for i in range (len(L)):
for j in range(len(L)):
while [i,j]!=arrivee:
if couloirs[i+1,j]==1 and cheminpossible[i,j]==0:
cheminpossible[i,j+1]=1
chemin.append([i+1,j])
elif couloirs[i+1,j+1]==1 and cheminpossible[i,j]==0:
cheminpossible[i+1,j+1]=1
chemin.append([i+1,j+1])
elif couloirs[i,j+1]==1 and cheminpossible[i,j]==0:
cheminpossible[i,j+1]=1
chemin.append([i,j+1])
else:
chemin.remove(chemin[-1])
return chemin

Messages : 0

Inscription : 31 oct. 2016 11:47

Profil de l'utilisateur : Élève de lycée

Re: Trouver la sortie

Message par prépa1002 » 12 févr. 2017 11:35

J'ai la fonction suivante et on me dit que mon return est en dehors de la fonction dans tous les cas... Pourquoi?
fonction.png
fonction.png (20.15 Kio) Consulté 1547 fois

Messages : 13

Inscription : 27 févr. 2013 16:45

Profil de l'utilisateur : Élève de lycée

Re: Trouver la sortie

Message par loupi » 13 févr. 2017 12:48

il n'y a pas de définition de fonction donc le return produit une erreur.
il faut aussi peut-être réinitialiser i et j avant le while, et les incrémenter dans la boucle, sinon...
Il semble aussi qu'il y ait des erreurs dans tes tests de case disponible.

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: Trouver la sortie

Message par fakbill » 13 févr. 2017 21:55

Ce code est une horreur ;)
from X import * : NON. jamais sauf si on sait exactement ce qu'on fait. Pourquoi? Parce que ça peut écraser des noms existants sans rien dire. Par exemple, math.sqrt scipy.sqrt et numpy.sqrt sont trois fonctions différentes. On import seulement ce dont on a besoin.

arrivee=[48,47] : là comme ça en plein milieu du code? non. Si tu veux déclarer des globales alors fait le avant tout le reste.

return sans déclaration de fonction??? As tu compris ce que fais "return"? Explique nous :)
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Répondre