Problème Python liste de coordonées
TTVVP
Messages postés
2
Statut
Membre
-
looping -
looping -
Bonjour,
Je bloque sur un exercice Python.
On demande de considérer le déplacement d'un piéton a partir d'une liste ne contenant uniquement des 1 et des -1. On considère le piéton comme au centre d'un repère dont l'unité est la pas. Le piéton est supposé être à l'origine tourné vers le Nord. On dit que lorsque le piéton lit comme instruction 1 il tourne de 90° vers sa droite et fais un pas, lorsqu'il reçoit -1 il tourne de 90° vers sa gauche et fais un pas. L'algorithme doit renvoyer une liste des coordonnées des positions successives du piéton.
J'ai fais ça:
Seulement le problème est que Python n'accepte pas le fais qu'au début il y ait plus d'éléments dans la liste n que dans les listes x et y, il ne comprend pas que les listes x et y grandissent à chaque fois que la boucle est effectuée.
Merci par avance pour votre aide
Je bloque sur un exercice Python.
On demande de considérer le déplacement d'un piéton a partir d'une liste ne contenant uniquement des 1 et des -1. On considère le piéton comme au centre d'un repère dont l'unité est la pas. Le piéton est supposé être à l'origine tourné vers le Nord. On dit que lorsque le piéton lit comme instruction 1 il tourne de 90° vers sa droite et fais un pas, lorsqu'il reçoit -1 il tourne de 90° vers sa gauche et fais un pas. L'algorithme doit renvoyer une liste des coordonnées des positions successives du piéton.
J'ai fais ça:
def positions(n):
x=[]
y=[]
L=[]
x.append(0)
y.append(0)
if n[0] == 1:
x.append(1)
y.append(0)
else:
x.append(-1)
y.append(0)
for k in range (1,len(n)):
if x[k] == x[k-1] and x[k]<x[k-1]:
if n[k] == 1:
x.append(x[k])
y.append(y[k]+1)
else:
x.append(x[k])
y.append(y[k]-1)
else:
if x[k] == x[k-1] and x[k]>x[k-1]:
if n[k] == 1:
x.append(x[k])
y.append(y[k]-1)
else:
x.append(x[k])
y.append(y[k]+1)
else:
if y[k] == y[k-1] and y[k]<y[k-1]:
if n[k] == 1:
x.append(x[k]+1)
y.append(y[k])
else:
x.append(x[k]-1)
y.append(y[k])
else:
if y[k] == y[k-1] and y[k]>y[k-1]:
if n[k] == 1:
x.append(x[k]-1)
y.append(y[k])
else:
x.append(x[k]+1)
y.append(y[k])
for i in range (len(x)):
L.append((x[k],y[k]))
return L
Seulement le problème est que Python n'accepte pas le fais qu'au début il y ait plus d'éléments dans la liste n que dans les listes x et y, il ne comprend pas que les listes x et y grandissent à chaque fois que la boucle est effectuée.
Merci par avance pour votre aide
1 réponse
-
Bonsoir.
Si python ne comprend pas, c'est que tu lui expliques mal :D
Tafonction est beaucoup trop complexe pour une chose aussi simple, le truc est qu'il faut établir des constantes permettant de simplifier la chose.
N, E, S, O = range(4) DIRECTIONS = (N, S, E, O) PAS = { N:(0, 1), O:(-1, 0), S:(0, -1), E:(1, 0), } itineraire = (1, 1, 0, 0, 0, 0, -1, -1, 0) direction = N # dir. de départ pos = [(0, 0)] # x, y de départ for n in itineraire: direction += n if direction > 3 : direction = 0 pas = PAS[direction] pos_courante = pos[-1] pos_suivante = (pos_courante[0] + pas[0], pos_courante[1] + pas[1]) pos.append(pos_suivante) print('origine', pos[0]) for i, d in enumerate(itineraire) : print(d, pos[i+1])
Et encore, on peut encore plus raccourcir ce code.