Aller au contenu

Remplacer une valeur⚓︎

Écrire la fonction remplacer prenant en argument :

  • une liste d'entiers valeurs
  • un entier valeur_cible
  • un entier nouvelle_valeur

et renvoyant une nouvelle liste contenant les mêmes valeurs que valeurs, dans le même ordre, sauf valeur_cible qui a été remplacé par nouvelle_valeur.

La liste passée en paramètre ne doit pas être modifiée.

Exemples
🐍 Console Python
>>> valeurs = [3, 8, 7]
>>> remplacer(valeurs, 3, 0)
[0, 8, 7]
>>> valeurs
[3, 8, 7]
🐍 Console Python
>>> valeurs = [3, 8, 3, 5]
>>> remplacer(valeurs, 3, 0)
[0, 8, 0, 5]
>>> valeurs
[3, 8, 3, 5]
###
# Testsbksl-nl# 1er testbksl-nlvaleurs = [3, 8, 7]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 7]bksl-nlassert valeurs == [3, 8, 7], "Il ne faut pas modifier les valeurs données en entrée"bksl-nl# 2nd testbksl-nlvaleurs = [3, 8, 3, 5]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 0, 5]bksl-nlassert valeurs == [3, 8, 3, 5], "Il ne faut pas modifier les valeurs données en entrée"bksl-nlbksl-nlbksl-nl# Tests supplémentairesbksl-nl# Valeurs identiques à l'entréebksl-nlvaleurs = [5] py-str 8bksl-nlassert remplacer(valeurs, 5, 10) == [10] py-str 8bksl-nlassert valeurs == [5] py-str 8, "Il ne faut pas modifier les valeurs données en entrée"bksl-nl# Valeurs identiques à la sortiebksl-nlvaleurs = [5] py-str 8 + [10] py-str 2bksl-nlassert remplacer(valeurs, 10, 5) == [5] py-str 10bksl-nlassert valeurs == [5] py-str 8 + [10] py-str 2, "Il ne faut pas modifier les valeurs données en entrée"bksl-nl# Cible non présentebksl-nlvaleurs = [5] py-str 8bksl-nlassert remplacer(valeurs, 10, 1) == [5] py-str 8bksl-nlassert valeurs == [5] py-str 8, "Il ne faut pas modifier les valeurs données en entrée"bksl-nl# liste videbksl-nlvaleurs = []bksl-nlassert remplacer(valeurs, 10, 1) == []bksl-nlassert valeurs == [], "Il ne faut pas modifier les valeurs données en entrée"bksl-nlbksl-nl 5/5

def remplacer(valeurs, valeurpy-undcible, nouvellepy-undvaleur):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nl# 1er testbksl-nlvaleurs = [3, 8, 7]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 7]bksl-nlassert valeurs == [3, 8, 7]bksl-nl# 2nd testbksl-nlvaleurs = [3, 8, 3, 5]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 0, 5]bksl-nlassert valeurs == [3, 8, 3, 5]bksl-nlbksl-nldef remplacer(valeurs, valeurpy-undcible, nouvellepy-undvaleur):bksl-nl resultat = []bksl-nl for x in valeurs:bksl-nl if x == valeurpy-undcible:bksl-nl resultat.append(nouvellepy-undvaleur)bksl-nl else:bksl-nl resultat.append(x)bksl-nlbksl-nl return resultatbksl-nlbksl-nlbksl-nl# Testsbksl-nl# 1er testbksl-nlvaleurs = [3, 8, 7]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 7]bksl-nlassert valeurs == [bksl-nl 3, 8, 7], "Il ne faut pas modifier les valeurs données en entrée"bksl-nl# 2nd testbksl-nlvaleurs = [3, 8, 3, 5]bksl-nlassert remplacer(valeurs, 3, 0) == [0, 8, 0, 5]bksl-nlassert valeurs == [bksl-nl 3, 8, 3, 5], "Il ne faut pas modifier les valeurs données en entrée"bksl-nlbksl-nl

A

Il n'y a pas de difficultés majeures si ce n'est prendre soin de ne pas modifier la liste initiale.

On crée donc une seconde liste que l'on complète au fur et à mesure en parcourant les valeurs de valeurs.

On aurait aussi pu utiliser une liste par compréhension et un opérateur ternaire :

🐍 Script Python
def remplacer(valeurs, valeur_cible, nouvelle_valeur):
    return [x if x != valeur_cible else nouvelle_valeur for x in valeurs]

Z