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.
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.
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é.
× 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.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique