Problème Python liste de coordonées

TTVVP Messages postés 2 Statut Membre -  
 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:
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

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