Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur : index out of range alors que non

    18 février 2016 à 18:24:54

    Bonjour à tous,

    C'est mon premier message alors désolé si je rate quelque chose.

    Je souhaite faire un code qui prend une liste de numéro, et si on retrouve plusieurs fois le même numéro alors on les supprime de façon à ce qu'il n'en reste qu'un (il doit y avoir une fonction qui permet de faire ça directement mais le but de l'exercice est de faire sans).

    J'ai fait ceci

    #-*-coding:utf8;-*-
    import os
    import random
    tab = []
    n = int(input("La liste de nombres aléatoires comportera combien de nombres ?"))
    for i in range(n):
    	tab.append(random.randint(1, 10))
    print(tab)
    for i in range(n):
    	for j in range(n):
    		print(i, j)
    		if tab[i]==tab[j] and i!=j:
    			del tab[i]
    print(tab)
    os.system("pause")	


    Pour un n petit (1 ou 2 par exemple) ça fonctionne, mais à partir de 4 ça part en cacahuètes et j'ai tout le temps l'erreur :

    if tab[i]==tab[j] and i!=j:

    IndexError: list index out of range

    Je comprends vraiment pas, mon n c'est la taille de la liste donc forcément ça ne peut pas être out of range.

    Merci pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2016 à 19:00:32

      Ton n est la longueur de la liste avant que tu ne la modifies ;)

      Si n vaut 56, mais que tu retires 23 éléments, forcément, il y a un moment où Python va gueuler :p

      Tu peux créer une liste auxiliaire que tu modifies, ça peut être une solution :)

      • Partager sur Facebook
      • Partager sur Twitter
        18 février 2016 à 19:00:41

        Ton n est la taille de la liste au début, mais cette taille réduit à chaque élément supprimé, il est donc normal que tu sortes des bornes, et c'est en cela que ton algorithme est faux.

        Ps : os.system("pause") est une mauvaise pratique.

        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2016 à 19:08:53

          Je me suis frappé pour me punir.

          Merci beaucoup !

          entwanne a écrit:

          Ps : os.system("pause") est une mauvaise pratique.

          Pourquoi ?



          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2016 à 19:22:38

            Parce que le comportement voulu d'un programme en console est de se terminer à la fin de son travail, pas d'attendre une entrée utilisateur. Si tu veux que la console perdure à ton programme, il te suffit de l'exécuter depuis une console.

            Et en cas d'exception levée, ton pause n'est de toute manière jamais exécuté.

            • Partager sur Facebook
            • Partager sur Twitter

            Erreur : index out of range alors que non

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown