Aller au contenu

Des couleurs en HTML⚓︎

Deux représentations des couleurs⚓︎

Une couleur en HTML est représentée par une chaine de caractères de sept caractères dont le premier est '#' ; les six autres, groupés 2 par 2 forment 3 entiers en hexadécimal (base 16). Le premier entier est la quantité de rouge ; le deuxième la quantité de vert et le troisième est la quantité de bleu. Ces trois valeurs hexadécimales sont comprises entre "00" et "FF".

Exemples

Voici quelques couleurs en HTML :

  • "#C0392B" une sorte de brun rouge,
  • "#00FF00" du vert uniquement,
  • "#000000" du noir.

Une autre façon de représenter une couleur est par un triplet \((r, v, b)\) de valeurs décimales comprises entre \(0\) et \(255\) : \(r\) est la quantité de rouge, \(v\) la quantité de vert et \(b\) la quantité de bleu.

On souhaite écrire une fonction html_vers_rvb qui prend une chaine de caractères représentant une couleur HTML en paramètre et qui renvoie le triplet de décimaux \((r, v, b)\) représentant la même couleur.

On rappelle les valeurs décimales des 16 chiffres hexadécimaux sont : '0' vaut \(0\), jusqu'à '9' qui vaut \(9\), puis 'A' vaut \(10\), 'B' vaut \(11\) ainsi de suite jusqu'à 'F' qui vaut \(15\).

Pour calculer la valeur décimale d'un nombre hexadécimal de deux chiffres \((ab)_{16}\), on fera le produit de la valeur décimale du chiffre des seizaines \(a\) par \(16\) plus la valeur décimale du chiffre des unités \(b\).

Exemples
  • le nombre hexadécimal "B5" vaut \(11\times 16 + 5\) soit \(181\) en décimal,
  • "00" vaut \(0\times 16 + 0\) soit \(0\),

Indication

🐍 Console Python
>>> couleur = "#F307D6"
>>> couleur[1]
'F'
>>> couleur[2]
'3'

Questions⚓︎

  1. Compléter le dictionnaire HEX_DEC qui donne les valeurs décimales des chiffres hexadécimaux
  2. Écrire la définition de la fonction hex_int qui prend deux chaines d'un caractère en paramètres a et b ; de sorte que \((ab)_{16}\) est un entier en hexadécimal et renvoie la valeur décimale associée :

    🐍 Console Python
    >>> hex_int('B', '5')
    181
    >>> hex_int('0', '0')
    0
    

  3. Écrire la définition de la fonction html_vers_rvb en vous servant de la fonction précédente.

    🐍 Console Python
    >>> html_vers_rvb("#C0392B")
    (192, 57, 43)
    >>> html_vers_rvb("#00FF00")
    (0, 255, 0)
    >>> html_vers_rvb("#000000")
    (0, 0, 0)
    

###
# testsbksl-nlassert hexpy-undint("B", "5") == 181, "Échec hexpy-undint exemple 1 de l'énoncé"bksl-nlassert hexpy-undint("0", "0") == 0, "Échec hexpy-undint exemple 2 de l'énoncé"bksl-nlbksl-nlbksl-nlassert htmlpy-undverspy-undrvb("#C0392B'") == (192, 57, 43), "Échec htmlpy-undverspy-undrvb exemple 1"bksl-nlassert htmlpy-undverspy-undrvb("#00FF00") == (0, 255, 0), "Échec htmlpy-undverspy-undrvb exemple 2"bksl-nlassert htmlpy-undverspy-undrvb("#000000") == (0, 0, 0), "Échec htmlpy-undverspy-undrvb exemple 3"bksl-nlbksl-nl# autres testsbksl-nlassert htmlpy-undverspy-undrvb("#FFFFFF") == (bksl-nl 255,bksl-nl 255,bksl-nl 255,bksl-nl), "Échec htmlpy-undverspy-undrvb autre exemple 1"bksl-nlassert htmlpy-undverspy-undrvb("#888888") == (bksl-nl 136,bksl-nl 136,bksl-nl 136,bksl-nl), "Échec htmlpy-undverspy-undrvb autre exemple 2"bksl-nlassert htmlpy-undverspy-undrvb("#760017") == (118, 0, 23), "Échec htmlpy-undverspy-undrvb autre exemple 3"bksl-nlbksl-nl 5/5

HEXpy-undDEC = {bksl-nl "0": 0,bksl-nl "1": 1,bksl-nl "2": 2,bksl-nl "3": 3,bksl-nl "4": 4,bksl-nl "5": 5,bksl-nl "6": 6,bksl-nl "7": 7,bksl-nl "8": 8,bksl-nl "9": 9,bksl-nl "A": 10,bksl-nl "B": 11,bksl-nl # ...bksl-nl}bksl-nlbksl-nlbksl-nldef hexpy-undint(seizaine, unite):bksl-nl ...bksl-nlbksl-nlbksl-nldef htmlpy-undverspy-undrvb(html):bksl-nl ...bksl-nlbksl-nlbksl-nl# testbksl-nlbksl-nlassert hexpy-undint("B", "5") == 181, "Échec hexpy-undint exemple 1 de l'énoncé"bksl-nlassert hexpy-undint("0", "0") == 0, "Échec hexpy-undint exemple 2 de l'énoncé"bksl-nlbksl-nlassert htmlpy-undverspy-undrvb("#C0392B") == (192, 57, 43), "Échec htmlpy-undverspy-undrvb exemple 1"bksl-nlassert htmlpy-undverspy-undrvb("#00FF00") == (0, 255, 0), "Échec htmlpy-undverspy-undrvb exemple 2"bksl-nlassert htmlpy-undverspy-undrvb("#000000") == (0, 0, 0), "Échec htmlpy-undverspy-undrvb exemple 3"bksl-nlbksl-nlHEXpy-undDEC = {bksl-nl "0": 0,bksl-nl "1": 1,bksl-nl "2": 2,bksl-nl "3": 3,bksl-nl "4": 4,bksl-nl "5": 5,bksl-nl "6": 6,bksl-nl "7": 7,bksl-nl "8": 8,bksl-nl "9": 9,bksl-nl "A": 10,bksl-nl "B": 11,bksl-nl "C": 12,bksl-nl "D": 13,bksl-nl "E": 14,bksl-nl "F": 15,bksl-nl}bksl-nlbksl-nlbksl-nldef hexpy-undint(seizaine, unite):bksl-nl """seizaine et unite sont les chiffres de l'écriture d'unbksl-nl nombre en base 16 à 2 chiffres. Renvoie la valeur int en base 10bksl-nl """bksl-nl return HEXpy-undDEC[seizaine] py-str 16 + HEXpy-undDEC[unite]bksl-nlbksl-nlbksl-nldef htmlpy-undverspy-undrvb(html):bksl-nl """html: str représente une couleur HTMLbksl-nl renvoie le triplet représentant la couleur en RVBbksl-nl """bksl-nl return (bksl-nl hexpy-undint(html[1], html[2]),bksl-nl hexpy-undint(html[3], html[4]),bksl-nl hexpy-undint(html[5], html[6]),bksl-nl )bksl-nlbksl-nl

A

Z