Bonjour à tous (: une idée de pourquoi ce code ne marche pas ?

try: 
    result[k+1] = 1
except IndexError:
    result.append(1)

Le terminal me retourne quand même cette erreur :

IndexError: list assignment index out of range
Traceback (most recent call last):
  File "...", line 99, in <module>
    binary_addition()
  File "..., line 89, in binary_addition
    retenue[k+1] = 1
IndexError: list assignment index out of range


Merci pour votre temps (:

modération : J'ai changé le titre de ton sujet afin qu'il soit plus explicite. Pense à faire ce genre de choses (expliquer le contexte et donner le plus d'élément possible pour une meilleur aide) Smiley cligne
Modifié par niuxe (20 Nov 2020 - 23:06)
Modérateur
Et l'eau,

Il te dit explicitement l'erreur.
a écrit :

IndexError: list assignment index out of range


regarde du côté de la méthode list.insert(i, x)

Pour ton code, je ne vois pas le contexte. Qu'essayes tu de faire ?
Modifié par niuxe (20 Nov 2020 - 22:30)
Merci de ta réponse, en fait je demande pas pourquoi le code retourne l'érreur mais pourquoi mon except IndexError n'est pas prit en compte.
Pour ce qui est de mon code, j'ai fait une fonction qui retourne l'addition de 2 nombre binaire:

(il n'y pas de bloc [code=...] qui permet de rentrer du python??)

def binary_addition():
    a = list(int(i) for i in input())
    b = list(int(i) for i in input())
    if len(a) > len(b):
        while len(a) > len(b):
            b.insert(0,0)
    else:
        while len(a) < len(b):
            a.insert(0,0)
    retenue = []
    result = []
    for i in range(len(a)):
        retenue.append(0)
        result.append(0)
    a,b = a[::-1],b[::-1]
    for k in range(len(a)):
        t = retenue[k]+a[k]+b[k]
        if t == 1:
            result[k] = 1
        elif t == 2:
            result[k] = 0
            retenue[k+1] = 1
        elif t == 3:
            result[k] = 1
            try: 
                result[k+1] = 1
            except IndexError:
                result.append(1)
    for r in range(len(result)):
        print(result[::-1][r], end="")

Modifié par vzytoi (20 Nov 2020 - 22:35)
Modérateur
vzytoi a écrit :

mais pourquoi mon except IndexError n'est pas prit en compte.
Pour ce qui est de mon code, j'ai fait une fonction qui retourne l'addition de 2 nombre binaire:



def binary_addition():
    a = list(int(i) for i in input())
    b = list(int(i) for i in input())
    if len(a) &gt; len(b):
        while len(a) &gt; len(b):
            b.insert(0,0)
    else:
        while len(a) &lt; len(b):
            a.insert(0,0)
    retenue = []
    result = []
    for i in range(len(a)):
        retenue.append(0)
        result.append(0)
    a,b = a[::-1],b[::-1]
    for k in range(len(a)):
        t = retenue[k]+a[k]+b[k]
        if t == 1:
            result[k] = 1
        elif t == 2:
            result[k] = 0
            retenue[k+1] = 1
        elif t == 3:
            result[k] = 1
            try: 
                result[k+1] = 1
            except IndexError:
                result.append(1)
    for r in range(len(result)):
        print(result[::-1][r], end="")


Je pense que ton erreur est ailleurs. Je pense que tu devrais généraliser ton try/except.

Sinon...

x = bin(int(input("entrer le 1er nombre : ")))
y = bin(int(input("entrer le 2e nombre : ")))
result_integer = int(x, 2) + int(y, 2)
result_binary = bin(result_integer)
print(result_integer)
print(result_binary)


Smiley cligne


vzytoi a écrit :

(il n'y pas de bloc [code=...] qui permet de rentrer du python??)


Je sais.... j'utilise (code=javascript)
Modifié par niuxe (20 Nov 2020 - 23:29)
niuxe a écrit :


Je pense que ton erreur est ailleurs. Je pense que tu devrais généraliser ton try/except.

Sinon...

x = bin(int(input("entrer le 1er nombre : ")))
y = bin(int(input("entrer le 2e nombre : ")))
result_integer = int(x, 2) + int(x, 2)
result_binary = bin(result_integer)
print(result_integer)
print(result_binary)


Smiley cligne




Je sais.... j'utilise (code=javascript)


Je penses pas que ma prof de NSI serait ravi si j'utiliserais la fonction préfaite de python pour le devoir qu'elle nous a demandée Smiley ravi
Finalement j'ai trouvée mon erreur, la console m'indiquait mon erreur en ligne 89 et j'avais mis le try except ligne 96 sur une ligne identique (:
Merci beaucoup de ton aide !!
Modifié par vzytoi (20 Nov 2020 - 23:06)
Modérateur
vzytoi a écrit :


Je penses pas que ma prof de NSI serait ravi si j'utiliserais la fonction préfaite de python pour le devoir qu'elle nous a demandée Smiley ravi
Finalement j'ai trouvée mon erreur, la console m'indiquait mon erreur en ligne 89 et j'avais mis le try except ligne 96 sur une ligne identique (:
Merci beaucoup de ton aide !!


cet article coupe court dans le monde professionnel. si on doit refaire quelque chose, c'est pour 2 raisons :
- optimiser (or je suis sûr que la fonction native sera plus optimisée)
- n'est pas conforme au besoin (or ce n'est pas le cas)
Modifié par niuxe (20 Nov 2020 - 23:17)