Filtrer un tableau

On considère dans cet exercice les fonctions booléennes suivantes prenant toutes en paramètre un nombre entier :

Fonction Rôle Exemple
est_positif Renvoie True si cet entier est strictement positif, False sinon est_positif(9) est évalué à True
est_pair Renvoie True si cet entier est pair, False sinon est_pair(9) est évalué à False
est_impair Renvoie True si cet entier est impair, False sinon est_impair(9) est évalué à True
est_premier Renvoie True si cet entier est premier, False sinon est_premier(9) est évalué à False

Ces différentes fonctions sont déjà chargées dans l'éditeur. Il est inutile de les importer.

Codes des fonctions booléennes utilisées
🐍 Script Python
def est_positif(x):
    return x > 0


def est_pair(x):
    return x % 2 == 0


def est_impair(x):
    return x % 2 != 0


def est_premier(n):
    if n < 2:
        return False

    d = 2
    while d * d <= n:
        if n % d == 0:
            return False
        d = d + 1
    return True

On signale que la fonction est_premier est très rudimentaire et sera peu efficace pour tester la primalité de grands nombres.

Elle reste toutefois fonctionnelle dans le cadre des valeurs testées dans cet exercice.

On cherche dans cet exercice à filtrer des listes de nombres entiers en utilisant ces fonctions.

Si l'on considère par exemple la liste nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] alors :

  • les entiers strictement positifs dans nombres sont : [1, 2, 3, 4, 5, 6, 7, 8, 9] ;

  • les entiers pairs dans nombres sont : [0, 2, 4, 6, 8] ;

  • les entiers impairs dans nombres sont : [1, 3, 5, 7, 9] ;
  • les entiers premiers dans nombres sont : [2, 3, 5, 7].

Écrire la fonction filtre qui prend en paramètres une fonction booléenne f parmi celles citées plus haut et un tableau de nombres entiers nombres et renvoie la liste des valeurs x de nombres pour lesquelles f(x) est évalué à True.

Contraintes

La liste nombres ne doit pas être modifiée.

Les valeurs seront renvoyées dans l'ordre dans lequel elles apparaissent dans nombres.

Fonction, opérateur ou module interdit

Dans cet exercice on interdit d'utiliser la fonction, l'opérateur ou le module :

  • filter
Exemples
>>> nombres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> filtre(est_positif, nombres)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> filtre(est_pair, nombres)
[0, 2, 4, 6, 8]
>>> filtre(est_impair, nombres)
[1, 3, 5, 7, 9]
>>> filtre(est_premier, nombres)
[2, 3, 5, 7]
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013ben,vi[motxPhklpwf(: cga=ryS]u/)2s1d050K0c0k0y0g0p0I0v0w0p0y0I0I0z010k0g0q010406050I0E0i0i0y0A0B040C0j0p0E0#0j0d050F0,0.0:0=0*0q0405150~180F150*0K0g0f0T0V0X0Z0n0g0x0n0p1m0n0k0(050O0b0p0c1h0W0Y011l1n1p1n0k1v1x1t0k0A160k0n0T0^0I0q0y0d0Z0H011z1j010s0Q0c0d0y0i0c1t1S1U1Z1B1$1x1)1+0(0a0v0m0A0j0q0j0I0g0{0d0v0M1Q0A0A0c0w230~1.0d160F1O2g1L1N1M1u0K1:0Z1p0d1(201t1e1g0U1A2q0g2s0d0j2w1t0q29162e2g2K0+1T242y1!2D0A0/0p0(0J2d2O0)2N1/2Q1B2S2U0(0H2Y1U2g2H0c2g2w2j0K1N2o2%0Z0w2E1,162?172I2#2f2-352}0M2J2O2p010o0(0M0s363a2$1i1B0r0(0v3i343c0d0s0(1=1L0c3q2e3c0%040t3z3b2{010d3v3F3k2z013C0e3i3p3A3H3J042D0i0b290I3L2P3l0Z3C0G0u3i060v3/3S3G3(3d0(290k0E0A0}0 2Z3;3M1!3C0h3$3s0(0l3R3r3H3e040s0j0A493T3?3V483~2.403%3N0j3n042B4h3=3N3V3X3Z0c3#4m2f4o3c4c0g3h4D044F3U3K4K4a3?3C3E4P4i4x47453H3*0D3-0~382;19330F312h2^0~2k4:0y1w4)4,1f2!4,0N0P0R04.