Adloun

Sans machine : que valent ord("B") , chr(100) et chr(ord("A") + 32) ?

Application directe du cours · niveau 1 (application) · NSI (première), chapitre 2 — Flottants, booléens et textes · Logique élémentaire, caractères et octets

Énoncé

Sans machine : que valent ord("B"), chr(100) et chr(ord("A") + 32) ? En déduire une fonction minuscule(c) qui met en minuscule un caractère non accentué.

Corrigé

Les majuscules occupent les codes à (A ), les minuscules à (a ) — soit exactement de plus. Donc : ord("B") vaut ; chr(100) vaut 'd' (car , quatrième lettre) ; chr(ord("A") + 32) vaut 'a'.


def minuscule(c):
    """Minuscule d'un caractere ASCII ; les autres sont inchanges.

    Precondition : c est un caractere unique. L'ecart de 32 entre les
    deux casses ne vaut QUE pour les 26 lettres non accentuees.
    """
    if "A" <= c <= "Z":
        return chr(ord(c) + 32)
    return c

>>> "".join(minuscule(c) for c in "Bonjour NSI")
'bonjour nsi'

Erreur attendue : appliquer le à tout caractère. Sur &quot;É&quot; (U+00C9, code ) on obtiendrait le code , qui est &quot;é&quot; — par chance, latin-1 a conservé l'écart. Mais sur &quot;1&quot; on obtiendrait &quot;Q&quot;, et sur une lettre grecque n'importe quoi. Le test &quot;A&quot; &lt;= c &lt;= &quot;Z&quot; n'est pas décoratif : c'est la précondition.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.