Aller au contenu

Comparaisons

On voudrait pouvoir écrire une fonction qui, étant donné les irradiances maximales et minimales d'une station spatiale et une distance au soleil, retourne un booléen indiquant si la station fonctionne correctement ou non à cette distance.

Et par chance, le langage comporte un aspect de sa sémantique qui permet de faire exactement celà : les opérateurs de comparaison.

Il y a en Python 6 opérateurs de comparaison qui agissent sur des valeurs numériques, c'est à dire des valeurs de type float ou int. Ils comparent toujours deux valeurs. Ils produisent tous une valeur de type bool.

Egalité

L'opérateur == permet de tester l'égalité entre deux nombres.

L'expression a == b vaut True si a et b ont la même valeur numérique.

10 == 3

vaut False

5 == 5.0

vaut True

Inégalité

L'opérateur != permet de tester l'inégalité entre deux nombres.

L'expression a != b vaut True si a et b ont une valeur numérique différente.

10 != 3

vaut True

5 != 5.0

vaut False

Infériorité stricte

L'opérateur < permet de tester si un nombre est strictement inférieur à un autre.

L'expression a < b vaut True si a est strictement inférieur à b.

10 < 3

vaut False

10 < 10.0

vaut False

10.0 < 11.0

vaut True

Infériorité

L'opérateur <= permet de tester si un nombre est inférieur ou égal à un autre.

L'expression a <= b vaut True si a est inférieur ou égal à b.

10 < 3

vaut False

10 <= 10.0

vaut True

10.0 <= 11.0

vaut True

Supériorité stricte

L'opérateur > permet de tester si un nombre est strictement supérieur à un autre.

L'expression a > b vaut True si a est strictement supérieur à b.

10 > 3

vaut True

10 > 10.0

vaut False

10.0 > 11.0

vaut False

Supériorité

L'opérateur >= permet de tester si un nombre est supérieur ou égal à un autre.

L'expression a >= b vaut True si a est supérieur ou égal à b.

10 >= 3

vaut True

10 >= 10.0

vaut True

10.0 >= 11.0

vaut False

Précédence

Les opérateurs de comparaison ont tous la même précédence, et ont tous une précédence inférieure aux opérateurs vu jusqu'à présent.

L'expression

10 * 2 < 23 + 2

est donc équivalente à

(10 * 2) < (23 + 2)

Encadrements

Si l'on veut si un nombre a est compris entre b et c, avec b inférieur strictement à c, on peut réaliser un encadrement:

b < a < c

Cette expression vaut True si a est strictement supérieur à b et strictement inférieur à c.

Bien sûr, on peut utiliser d'autres opérateurs d'infériorité et de supériorité:

b <= a < c
Cette expression vaut True si a est supérieur ou égal à b et strictement inférieur à c.

Exercice : encadrement

Voici la spécification d'une fonction :

def entre_10_et_20(x):
    """x un nombre, retourne True si x est compris entre 10 et 20 inclus
    """

Réfléchissez aux différentes valeurs de x qui produisent des résultats différents.

Il y a cinq cas à tester au total. - x plus petit que 10 - x égal à 10 - x entre 10 et 20 exclus - x égal à 20 - x plus grand que 2O - Vous avez choisi peut-être d'autres valeurs.

def entre_10_et_20(x):
    """x un nombre, retourne True si x est compris entre 10 et 20 inclus

    >>> entre_10_et_20(9)
    False

    >>> entre_10_et_20(10)
    True

    >>> entre_10_et_20(13)
    True

    >>> entre_10_et_20(20)
    True

    >>> entre_10_et_20(22)
    False
    """

Implémentez la fonction de l'étape 1. Servez-vous des tests pour vérifier votre résultat.

vous pouvez utiliser une expression de comparaison dans un return :

return a < b

Il faut dans notre cas utiliser un encadrement.

def entre_10_et_20(x):
    """x un nombre, retourne True si x est compris entre 10 et 20 inclus

    >>> entre_10_et_20(9)
    False

    >>> entre_10_et_20(10)
    True

    >>> entre_10_et_20(13)
    True

    >>> entre_10_et_20(20)
    True

    >>> entre_10_et_20(22)
    False
    """
    return 10 <= x <= 20

Retour aux stations

Exercice

Implantez la fonction suivante. Ajoutez eventuellement des tests à sa spécification :

def station_compatible(ir_min, ir_max, distance):
    """ir_min, ir_max les irradiances minimales et maximales que peut supporter la stations, en watts par mètre carré.
    distance la distance au soleil, en millions de kilomètres
    """

Servez-vous de la fonction irradiance que l'on a écrit au chapitre précédent !

Vous devrez réaliser un encadrement entre deux valeurs.

def station_compatible(ir_min, ir_max, distance):
    """ir_min, ir_max les irradiances minimales et maximales que peut supporter la stations, en watts par mètre carré.
    distance la distance au soleil, en millions de kilomètres

    >>> station_compatible(9800, 12000, 125)
    False

    >>> station_compatible(2000, 3000, 120)
    True

    >>> station_compatible(1000, 2000, 120)
    False
    """
    return ir_min <= irradiance(distance) <= ir_max