Maths-cours

COURS & EXERCICES DE MATHÉMATIQUES

Close

Liste définie en compréhension

On souhaite écrire une fonction nommée fini_par_1 qui prend deux arguments entiers naturels a et b et qui retourne la liste des entiers compris, au sens large, entre a et b dont le chiffre des unités est égal à 1.

Par exemple, on souhaite que fini_par_1(0, 21) retourne la liste [1, 11, 21]

Il faut que cette fonction ne contienne qu'une unique commande (qui peut toutefois faire appel à plusieurs instructions) suivant le modèle ci-dessous :

def fini_par_1(a, b) :
   return ...

Indications :

Test :

Pour vérifier votre réponse, testez votre fonction avec les commandes :

>>> fini_par_1(0,1)
>>> fini_par_1(1,11)
>>> fini_par_1(10,50)
>>> fini_par_1(10,51)
>>> fini_par_1(100,50)

Corrigé

Voici une fonction possible :

def fini_par_1(a, b) :
   return [x for x in range(a,b+1) if x%10==1]

Explications :

  • range(a,b+1) retourne les entiers naturels compris entre a et b. On filtre ensuite cette liste à l'aide d'une instruction if.

  • x %10 retourne le reste de la division euclidienne de x par 10, c'est à dire le dernier chiffre de x. On teste alors si ce chiffre est égal à 1.

Test :

Voici les listes renvoyées par cette fonction pour les exemples donnés dans l'énoncé :

>>> fini_par_1(0,1)
[1]
>>> fini_par_1(1,11)
[1, 11]
>>> fini_par_1(10,50)
[11, 21, 31, 41]
>>> fini_par_1(10,51)
[11, 21, 31, 41, 51]
>>> fini_par_1(100,50)
[] # car 100 > 50