Aller au contenu

if, and, or, not

Les conditions utilisées dans un if sont souvent combinées: on veut vérifier une condtion A et une condition B, ou vérifier une conditon A ou une condition B, ou encore vérifier une condtion A et ne pas vérifier une condition B...

C'est à l'aide des mots clefs and, or, not que l'on pourra ainsi combiner des conditions.

and

Exercice

Ecrire une fonction prenant en paramètre un entier naturel n et deux entiers naturels a et b non nuls et renvoyant True si n est multiple de a et multiple de b (et renvoyant False sinon)

Important

La constante Python True s'écrit avec une majuscule. Il en va de même avec False.

and

On utilisera and:

>>> 18%2 == 0 and 18%9 == 0
True
>>> 18%2 == 0 and 18%10 == 0
False

Le premier test se traduit par: il est vrai que 18 est multiple commun de 2 et 9.
Le second test se traduit par: il est faux que 18 est multiple commun de 2 et 10 (autrement dit, 18 n'est pas multiple d'au moins l'un des deux entiers 2, 10)

Solution
def est_multiple_commun(n, a, b):
    """
    n -- entier naturel
    a -- entier naturel non nul
    b -- entier naturel non nul
    renvoie True si n est multiple de a et multiple de b, renvoie False sinon.
    """
    return n%a == 0 and n%b == 0

Essais:

>>> est_multiple_commun(12, 3, 4)
True
>>> est_multiple_commun(9, 3, 4)
False

Exercice

Écrire une fonction prenant en paramètre un entier naturel n et renvoyant en sortie la somme des entiers multiples de 6 et de 8 compris (au sens large) entre 0 à n.

Le principe

Il s'agit d'appliquer le principe d'accumulation déjà utilisé.

code python
def somme_multiples_de_6_et_8(n):
    """
    n -- entier naturel

    renvoie la somme  des entiers naturels multiples de 6 et 8 et
    valant au plus n.
    """
    somme = 0
    for k in range(0, n+1):
        if k%6 == 0 and k%8 == 0:
            somme = somme + k
    return somme

Test:

>>> somme_multiples_de_6_et_8(48)
72

or

Exercice

Ecrire une fonction prenant en paramètre un entier naturel n et deux entiers naturels a et b non nuls et renvoyant True si n est multiple de a ou si n est multiple de b (et renvoyant False sinon)

and

On utilisera or:

>>> 18%2 == 0 or 18%10 == 0
True
>>> 18%2 == 0 and 18%9 == 0
True
>>> 18%5 == 0 or 18%7 == 0
False
  • Le premier test se traduit par: il est vrai que 18 est multiple de 2 ou multiple de 10 (c'est à dire 18 est multiple d'au moins l'un des deux).
  • Le second test se traduit par: il est vrai que 18 est multiple de 2 ou multiple de 9 (c'est à dire 18 est multiple d'au moins l'un des deux).
  • Le troisième test se traduit par: il est faux que 18 est multiple de 5 ou de 7 (autrement dit, 18 n'est multiple ni de l'un, ni de l'autre)
Solution
def est_multiple_d_au_moins_l_un(n, a, b):
    """
    n -- entier naturel
    a -- entier naturel non nul
    b -- entier naturel non nul
    renvoie True si n est multiple de a ou est multiple de b (c'est à dire si n est multiple
    d'au moins l'un des deux entiers a, b), renvoie False sinon.
    """
    return n%a == 0 or n%b == 0

Essais:

>>> est_multiple_d_au_moins_l_un(12, 3, 4)
True
>>> est_multiple_d_au_moins_l_un(9, 3, 4)
True

Exercice

Écrire une fonction prenant en paramètre un entier naturel n et renvoyant en sortie la somme des entiers multiples de 6 ou multiples de 8 compris (au sens large) entre 0 à n.

principe

Le principe est le même que dans l'exercice précédent: on accumule par sommation les valeurs en n'oubliant pas de les filtrer.

code python
def somme_multiples_de_6_ou_de_8(n):
    """
    n -- entier naturel

    renvoie la somme  des entiers naturels multiples  d'au moins l'un des deux entiers
    6, 8 et valant au plus n.
    """
    somme = 0
    for k in range(0, n+1):
        if k%6 == 0 or k%8 == 0:
            somme = somme + k
    return somme

Un test:

>>> somme_multiples_de_6_ou_de_8(8)
14

not

Après avoir lu le code suivant:

>>> 4 == 3+1
True
>>> not(4 == 3+1)
False
>>> 4 == 5
False
>>> not(4 == 5)
True

écrire une fonction prenant en paramètres un entier naturel n et deux entiers strictement positifs a et b et renvoyant True si n n'est multiple ni de a, ni de b (et renvoyant False sinon).

Exemples:

>>> multiple_d_aucun_des_deux(13, 2, 3)
True
>>> multiple_d_aucun_des_deux(14, 2, 3)
False
Solution
  • Une première version:
def multiple_d_aucun_des_deux(n, a, b):
    """
    n -- entier naturel
    a -- entier naturel non nul
    b -- entier naturel non nul
    renvoie True si n n'est multiple ni de a, ni de b (c'est à dire si n n'est multiple
    d'aucun des deux), renvoie False sinon.
    """
    return not(n%a == 0 or n%b == 0)
  • Une seconde version:
def multiple_d_aucun_des_deux(n, a, b):
    """
    n -- entier naturel
    a -- entier naturel non nul
    b -- entier naturel non nul
    renvoie True si n n'est multiple ni de a, ni de b (c'est à dire si n n'est multiple
    d'aucun des deux), renvoie False sinon.
    """
    return not(n%a == 0) and  not(n%b == 0)
  • Une troisième version:
def multiple_d_aucun_des_deux(n, a, b):
    """
    n -- entier naturel
    a -- entier naturel non nul
    b -- entier naturel non nul
    renvoie True si n n'est multiple ni de a, ni de b (c'est à dire si n n'est multiple
    d'aucun des deux), renvoie False sinon.
    """
    return  n%a != 0 and  n%b != 0