Bon, ton code fait très programmation "C" avec un tableau de taille fixe dont on gère le nombre d'éléments séparément. En Python on a un type list qui est un conteneur dynamiques, qui dispose des opérateurs/méthodes: t.remove(valeur), del t[index]... et dont on peut connaître le nombre d'éléments len(t).
Bref, tu fais du C en Python, qui plus est avec un algo très compliqué pour réaliser une opération simple. Mais en restant dans ton code, en ajoutant docstring et commentaires (conseil, fait le, même pour toi, ça permet quand on lit/écrit d'identifier des écarts entre ce qu'on pense que la fonction fait et ce qu'elle fait réellement), ça donnerais:
defsupprimer(t,n,k):"Supprime l'élément à l'index k dans t (de taille n) et retourne la nouvelle taille"foriinrange(k,n-1):# On décale les éléments (les anciennes valeurs restent "à droite")t[i]=t[i+1]returnn-1defsupprimerPremiereOccurence(t,n,elt):"Supprime la première occurence de elt dans t (de taille n) et retourne la nouvelle taille de t"foriinrange(n):# Recherche la première occurence, et appelle la fonction de suppressionift[i]==elt:returnsupprimer(t,n,i)# Retourne nouvelle taille du tableau# Si pas trouvé, la taille du tableau n'a pas changé !!!!!returnn# <------------ ton bug était là: si elt n'est pas dans t, tu ne passes pas# par ton return et ça fait que ta fonction sort implicitement avec None,# qui se retrouve stocké dans nbelem, propagé dans n, puis qui provoque une # comparaison NoneType avec int (n>0) au début de l'itération suivante.defmystere(t,n,x):"Supprime les éléments x de t (de taille n) et retourne la nouvelle taille de t"continuer=Truewhilen>0andcontinuer==True:nbelem=supprimerPremiereOccurence(t,n,x)ifnbelem==n:continuer=Falseelse:n=nbelemreturnnliData=[2,-7,4,5,12,10,4,2,4,-18]print(mystere(liData,len(liData),4))
Note: Là on fait directement des modifications dans la liste passée en paramètre ; s'il n'y a pas de contrainte on préférera créer une nouvelle liste et la retourner (éviter les effets de bord).
Et ça se fait même en 1 ligne avec les listes en compréhension:
# Correction
Posté par lolop (site web personnel) . En réponse au message problème message d'erreur python. Évalué à 4. Dernière modification le 09 mars 2019 à 12:52.
Bon, ton code fait très programmation "C" avec un tableau de taille fixe dont on gère le nombre d'éléments séparément. En Python on a un type
listqui est un conteneur dynamiques, qui dispose des opérateurs/méthodes:t.remove(valeur),del t[index]... et dont on peut connaître le nombre d'élémentslen(t).Bref, tu fais du C en Python, qui plus est avec un algo très compliqué pour réaliser une opération simple. Mais en restant dans ton code, en ajoutant docstring et commentaires (conseil, fait le, même pour toi, ça permet quand on lit/écrit d'identifier des écarts entre ce qu'on pense que la fonction fait et ce qu'elle fait réellement), ça donnerais:
Note: Là on fait directement des modifications dans la liste passée en paramètre ; s'il n'y a pas de contrainte on préférera créer une nouvelle liste et la retourner (éviter les effets de bord).
Et ça se fait même en 1 ligne avec les listes en compréhension:
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN