Bonjour,
Je tente de comprendre et retranscrire sur Python, la propriété suivante :
def est_chemin(t):
n = longueur(t)
i = 0
for i in range(n):
return t[i+1] - t[i] = 1
salut
puisque la distance entre deux points consécutifs est 1 c'est que tu travailles sur le réseau Z2 R2
donc tu te déplaces d'un point à un autre suivant l'une des quatre directions cardinales N, E, S, O
donc ton script est totalement hors sujet ... ou du moins incompréhensible : que veux-tu faire avec ta fonction ?
Bonjour,
Merci pour ta réponse. En fait, je pensais justement que ma fonction pourrait interpréter le fait qu'un point serait toujours à côté ou au dessus de l'autre, mais effectivement, je m'emmêle les pinceaux. Ça pourrait paraître stupide; j'ai compris le principe, mais je bloque vraiment quand il s'agit de l'expliquer et encore plus sous Python
de rien ...
mais si tu veux qu'on t'aide il faut justement nous dire plus précisément ce que tu veux faire ...
Désolé pour l'ambiguïté. En fait, je cherche une fonction est_chemin avec pour argument un tableau t de points qui vérifie si deux points consécutifs sont bien à distance 1.
Dans ma logique des choses, j'aurais utilisé la formule permettant de calculer la distance entre deux points :
Mais comme on sait que la distance est de 1, cela donnerait
Et à partir de là, je bloque
mais comment est défini ton tableau de points?
moi je le vois comme une liste de couples : les coordonnées de chaque points donc de la forme [[x_1, y_1], [x_2, y_2], ..., [x_n, y_n]]
est-ce ainsi ?
Plus ou moins, c'est un tableau qui commence ainsi :
[[0,0], [0,1], [-1,1], [-1,2], [-1,3], [-2,3], [-3,3], ...]
Pi = (5, −4) est représenté, par exemple, par la liste [5,-4]
Et moi ce que j'essaie de retranscrire sur Python c'est :
Quelque soit i, ||Pi+1 − Pi|| = 1
bonsoir à vous,
juste de passage
pas sûre d'avoir bien compris la question posée ...
comment est construit, au départ, le tableau que tu passes en argument ?
tu veux juste vérifier si la liste forme un chemin de longueur n ?
le point de départ du chemin est toujours l'origine ?
je voulais juste te signaler, si besoin est , que L= [[0,0], [0,1], [-1,1], [-1,2], [-1,3], [-2,3], [-3,3]] , par exemple,
est une liste de listes.
et donc pour accéder à chaque 'coordonnée' d'un point en particulier, tu peux utiliser cette syntaxe :
pour le 3ème point, par exemple
L[2][0] --> retourne -1
L[2][1] --> retourne 1
bonsoir verdurin
j'avais pensé à un quadrillage orthonormé au début, mais c'est peut-être plus compliqué.
s'il suffit que la distance de 2 points consécutifs soit égale à 1, A/C/B/D est un chemin de longueur 3,
mais les coordonnées peuvent être capricieuses...
... sans doute je n'ai pas bien compris l'énoncé.
Salut carita.
Un extrait de l'énoncé :
Et bien désolé d'avoir créé tout un malentendu, comme cela m'a un peu retourné, il se peut que je suis passé à côté de d'autres détails. Je vous remercie tout de même à vous 3 de votre contribution.
Tu as un chemin comme celui-ci : exemple1 : [[0,0], [0,1], [-1,1], [-1,2], [-1,3], [-2,3], [-3,3], ...]
Prenons un 2ème exemple : [[0,0], [0,1], [-1,1], [-1,2], [-1,3],[0,4], [1,4], [1,3], ...]
Le premier chemin est valide, mais pas le 2ème.
Quand on fait la vérification à la main, on fait comment ?
On teste le premier segment [0,0], [0,1] : c'est bon
Donc on teste le 2ème segment : [0,1], [-1,1] : c'est bon
Puis le 3ème, le 4ème, le 5ème ...
Ici le cinquième segment [-1,3],[0,4] n'est pas bon, donc on ne regarde même pas la suite, et on dit que le chemin n'est pas valide.
Ton programme doit faire la même chose :
Pour chaque segment
Si le segment n'est pas valide, alors fin du controle, le chemin n'est pas valide , et renvoyer 'le Chemin est NON valide'
Si le segment est valide, on continue la vérification.
Fin
Si le programme arrive jusqu'ici, ça veut dire que tous les segments sont valides
Renvoyer 'Le chemin est valide'
for i in range (n)
return xxx ' Forcément, on traite la première valeur de i, et le traitement s'arrete.
Merci beaucoup d'avoir pris le temps de m'expliquer tout cela en détail!
Du coup, voilà ce qu'il en ressort en espérant avoir une bonne saisie.
def est_chemin(t):
n = len(t)
i = 0
for i in range(n):
if t[i+1] - t[i] != 1:
return False
else:
return True
Tu as défini cette fonction.
Tu peux tester pour voir si elle donne le résultat voulu.
def est_chemin(t):
n = len(t)
i = 0
for i in range(n):
if t[i+1] - t[i] != 1:
return False
else:
return True
tt= [[0,0], [0,1], [-1,1], [-1,2], [-1,3],[0,4], [1,4], [1,3]]
print( est_chemin ( tt))
Essaye ce code :
def est_chemin(t):
n = len(t)
i = 0
for i in range(n):
print ( 'controle ' , ' i=', i, ' t=' , t[i] , ' suivant=' , t[i+1] )
if t[i+1] - t[i] != 1:
return False
else:
return True
tt= [[0,0], [0,1], [-1,1], [-1,2], [-1,3],[0,4], [1,4], [1,3]]
print( est_chemin ( tt))
bonsoir
t[i] et t[i+1] dont des listes; python ne sait pas soustraire des listes.
(cf mon message de 19h02)
par exemple ceci : merci verdurin
def est_chemin(t):
compteur=i=0
chemin=True
while chemin and i<= len(t):
if abs((t[i+1][0] - t[i][0])) + abs((t[i+1][1] - t[i][1])) == 1:
compteur +=1
i+=1
else:
chemin=False
return compteur, t[0:compteur+1]
tt= [[0,0], [0,1], [-1,1], [-1,2], [-1,3],[1,4], [1,4], [1,3]]
print("chemin de longueur ", est_chemin (tt))
chemin de longueur (4, [[0, 0], [0, 1], [-1, 1], [-1, 2], [-1, 3]])
Merci Carita de la précision et de l'exemple fourni, le message d'erreur en est plus clair. (et pour ton code ty59847, hélas la console ne me donnait pas plus d'indications)
En tout cas, je vous remercie de vous être tous donné du mal!
Je vais essayer de reprendre tout ça demain, bonne nuit
Le code que je proposais affichait que t[0] était non pas un nombre, mais [0,0] et t[1] était[0,1] ; il affiche ça juste avant un message de plantage, au moment de la soustraction.
L'idée était de te faire 'deviner' que soustraire ces 2 trucs, ça n"a pas de sens, il faut 'soustraire' comme ce que propose Carita.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :