Problème Python liste de coordonées

Fermé
TTVVP Messages postés 1 Date d'inscription mercredi 31 octobre 2018 Statut Membre Dernière intervention 31 octobre 2018 - Modifié le 31 oct. 2018 à 17:50
 looping - 31 oct. 2018 à 19:35
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:
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
A voir également:

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.
1