Un "out of range" caché ..

Fermé
helena8686 Messages postés 8 Date d'inscription jeudi 24 octobre 2019 Statut Membre Dernière intervention 29 octobre 2019 - 29 oct. 2019 à 10:31
 khrug - 29 oct. 2019 à 12:37
Bonjour,
Voici un code, où la fonction appellecpurant_aux renvoie une liste, filecarresrouges_aux et filecarresrouges renvoient une liste de sous liste, randompremierplastique renvoie une liste, renverser renvoie une liste, et dessinerrtrajectoireplastique utilise Tkinter.

def filecarresrouges_aux (file) :  
    file2 = [file]
    while file[0] != (-1) :
        n, m = file[0], file[1]
        l = appellecourant_aux (n, m)
        file2.insert(0, l)
        file = l
    return file2

def filecarresrouges () :
    return filecarresrouges_aux (randompremierplastique())

def renverser (file) :
    l = filecarresrouges()
    l.reverse()
    return l    

def dessinertrajetplastique () :
    f = renverser(filecarresrouges())
    print(f)
    i = len(f)-1
    longueur = len(f)
    if i <= (longueur-1) and i > 1 : 
        for k in range (0, i-1) :
            n1, m1 = f[k][0], f[k][1]
            print(n1, m1)
            C.create_rectangle(n1+3, m1+3, n1+12, m1+12, fill = 'green')
        n, m = f[i-1][0], f[i-1][1]
        print(n, m)
        C.create_rectangle(n+3, m+3, n+12, m+12, fill = 'red')
    return 0


Sans les mentions "C.create_rectangle" dans la fonction dessinertrajetplastique (), le code n'a pas d'erreur.
Pourtant, quand je met en plus ces modifications, je recois le message d'erreur suivant :

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in dessinertrajetplastique
File "<stdin>", line 2, in filecarresrouges
File "<stdin>", line 5, in filecarresrouges_aux
IndexError: list index out of range


Auriez-vous une idée pour me débloquer s'il vous plait ?

1 réponse

Bonjour,

C'est quand même un gros bazar ton code, je comprends que tu aies du mal à t'y retrouver, rien qu'à le lire, on se demande quoi doit faire quoi. Et je crois que t'en as pas fini avec les bugs.
De plus je ne vois pas le rapport entre le fait qu'un rectangle soit créé et l'erreur que python jette.

Rien que dans cette fonction :

def dessinertrajetplastique () :
    # Que vaut f ?
    f = renverser(filecarresrouges())
    print(f)
    # Pourquoi une var len(f)-1 et plus bas tu fais longueur - 1 ?
    # Qui est la même chose, donc la condition sera toujours vrai !
    i = len(f)-1
    longueur = len(f)
    if i <= (longueur-1) and i > 1 :
        # Allons bon donc maintenant i - 1 qui équivaut à len(f) - 2, pourquoi ?
        for k in range (0, i-1) :
            n1, m1 = f[k][0], f[k][1]
            print(n1, m1)
            # C ? Comment veux-tu t'en sortir avec des noms de variables globales aussi court ?
            C.create_rectangle(n1+3, m1+3, n1+12, m1+12, fill = 'green')
        # idem pourquoi i-1 ?
        n, m = f[i-1][0], f[i-1][1]
        print(n, m)
        C.create_rectangle(n+3, m+3, n+12, m+12, fill = 'red')
    # Pourquoi un return 0 ? Sachant qu'en fait elle ne retourne rien d'autre en cas de plantage
    return 0


On n'y comprend rien.
0