3 votes

Utilisation d'une fonction sur chaque élément d'une liste

J'ai une liste ( decrypted_list ) qui contient quatre éléments entiers que je dois décrypter. La fonction a pour tâche de décrypter le code, et sa logique est correcte. Après avoir défini la fonction, je veux l'appeler sur chaque élément de decrypted_list pour décrypter ses éléments.

encrypted_list = [7, 1, 0, 2]

def decrypter(number):
    for number in encrypted_list:
        if (number + 4) < 10:
            return (number + 4)
        elif (number + 4) > 10:
            return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

Cependant, le résultat n'est pas celui que j'attendais :

Attendu : [1, 5, 4, 6]
Réel : [1, 1, 1, 1]

Aidez-nous ! Je suis novice en matière de Python :)

3voto

Pierre V. Points 1495

Il n'est pas utile de passer en boucle sur encrypted_list dans votre decrypter fonction. Cette fonction doit se contenter d'examiner le fichier number il n'a pas besoin d'être informé de l'existence de l'argument encrypted_list variable.

L'opération de bouclage elle-même ne doit avoir lieu que dans la compréhension de la liste ( [decrypter(x) for x in encrypted_list] ).

Remplacez votre fonction par la suivante et tout devrait bien se passer :

def decrypter(number):
  if (number + 4) < 10:
      return (number + 4)
  elif (number + 4) > 10:
      return (number + 4) % 10

2voto

Sweeper Points 1267

Votre fonction devrait ressembler à ceci :

def decrypter(number):
    if (number + 4) < 10:
        return (number + 4)
    elif (number + 4) > 10:
        return (number + 4) % 10

Vous ne devez pas utiliser de boucle for ici car vous allez utiliser cette fonction sur chaque élément de la liste dans la dernière ligne de votre code :

decrypted_list = [decrypter(x) for x in encrypted_list]

Comme vous l'avez dit, cette fonction ne décrypte qu'un seul numéro, elle n'a donc pas besoin de connaître toute la liste. encrypted_list devrait pas apparaissent dans cette fonction.

L'ajout de cette boucle for modifiera le comportement de la fonction : quel que soit le nombre que vous lui transmettez, elle ne décryptera que ce nombre. 1 car c'est le premier élément de la liste. La boucle for ne parcourt pas réellement la liste, parce qu'elle retourne à la première itération.

2voto

gst Points 1819

D'autres ont déjà signalé le problème dans votre code. J'aimerais souligner une redondance dans votre fonction. Celle-ci produirait le même résultat : decrypted_list = [(x + 4) % 10 for x in encrypted_list] . Ou si vous voulez avoir une fonction :

def decrypter(number):
    return (number + 4) % 10

decrypted_list = [decrypter(x) for x in encrypted_list]

Depuis x % 10 == x si x < 10 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X