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 "É" (U+00C9, code ) on obtiendrait le code , qui est "é" — par chance, latin-1 a conservé l'écart. Mais sur "1" on obtiendrait "Q", et sur une lettre grecque n'importe quoi. Le test "A" <= c <= "Z" 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.