REVISIONS DE DEBUT D'ANNEE

Objectif : Ce module de révision en autonomie vous permettra de réactiver vos connaissances sur la programmation Python (boucles while, for, listes, conditions booléennes) tout en revoyant les concepts fondamentaux de la représentation des données abordés en classe de Première.

1 - Le Binaire et la boucle Tant Que (while)

Pour convertir un nombre décimal en binaire (base 2), la méthode algorithmique consiste à diviser successivement ce nombre par 2 jusqu'à obtenir un quotient nul. Les restes de ces divisions, lus à l'envers, forment le nombre binaire.

Voici un script Python qui permet d'automatiser cette conversion. Cependant, il manque des éléments cruciaux pour qu'il fonctionne !

@1 Compléter les ... dans le code ci-dessous pour que la fonction retourne la bonne liste de bits. (Aide : N'oubliez pas la différence entre / et // en Python). Ajoutez également la gestion de la saisie utilisateur : le programme doit demander un nombre et afficher une erreur si celui-ci n'est pas strictement positif.

def convertisseur_binaire(nombre_decimal):
    restes = []

    # Tant que le nombre n'est pas tombé à zéro
    while nombre_decimal > ... :
        # On calcule le reste de la division par 2
        reste = nombre_decimal % ...
        restes.append(...)
        # On divise le nombre par 2 (division entière)
        nombre_decimal = nombre_decimal ... 2

    # On inverse la liste
    restes.reverse()
    return restes

# Demande à l'utilisateur
saisie = int(input("Entrez un entier positif : "))

# Vérification (si la saisie est négative ou nulle)
if saisie ... :
    print("Erreur : le nombre doit être strictement positif !")
else:
    print("Le binaire est :", convertisseur_binaire(...))
Solution :

(Contenu masqué)

2 - Le Complément à 1 et la boucle Pour (for)

Lorsqu'on travaille avec des nombres binaires, on a souvent besoin d'inverser les bits (transformer les 0 en 1 et les 1 en 0). C'est ce qu'on appelle le Complément à 1, qui est la première étape pour représenter des nombres négatifs (le fameux complément à 2).

@2 Compléter ce script Python qui parcourt une chaîne de caractères binaire lettre par lettre et construit une nouvelle chaîne où chaque bit est inversé.

def inverser_bits(chaine_binaire):
    resultat = ""

    # On parcourt chaque bit de la chaîne
    for bit in ... :
        if bit == "0":
            resultat = resultat + ...
        else:
            resultat = resultat + ...

    return resultat

print("L'inverse de 10110 est :", inverser_bits("10110"))
# Attendu : "01001"
Correction :

(Contenu masqué)

@3 Pour aller plus loin : Toujours avec la fonction inverser_bits, on veut maintenant demander à l'utilisateur de saisir son code. Mais il faut vérifier qu'il ne tape pas de bêtises ! Complétez le programme pour afficher une erreur s'il tape autre chose que des 0 et des 1.

saisie = input("Entrez une chaîne binaire : ")
est_valide = True

# On vérifie chaque caractère de la saisie
for caractere in saisie:
    if caractere != ... and caractere != ... :
        est_valide = ...

if est_valide == True:
    print("Le complément à 1 est :", inverser_bits(...))
else:
    print("Erreur : la chaîne ne doit contenir que des 0 et des 1 !")
Solution :

(Contenu masqué)

3 - Logique Booléenne et Conditions (if / and / or)

La logique booléenne (Vrai/Faux, 1/0) est à la base de toute l'informatique. En Python, elle se traduit par les opérateurs and (ET), or (OU) et not (NON).

Pour valider un mot de passe robuste, un site web vérifie souvent s'il contient au moins 8 caractères ET (une majuscule OU un chiffre).

@4 Écrire la condition booléenne dans le if pour que la fonction retourne True uniquement si les critères ci-dessus sont respectés.

def mot_de_passe_valide(longueur, contient_maj, contient_chiffre):
    # Remplacer les ... par la condition booléenne
    if ... :
        return True
    else:
        return False

# Tests
print(mot_de_passe_valide(10, True, False)) # Doit afficher True
print(mot_de_passe_valide(5, True, True))   # Doit afficher False
print(mot_de_passe_valide(12, False, False))# Doit afficher False
Solution :

(Contenu masqué)

@5 Pour aller plus loin (Un peu plus corsé !) : Dans un jeu vidéo, un coffre magique ne s'ouvre que si toutes ces conditions sont réunies : - Le joueur possède la clé dorée. - Le joueur est de niveau 10 ou plus, OU il possède le sort "Crochetage". - Le joueur n'est pas empoisonné.

Écrivez entièrement la fonction coffre_ouvrable(cle_doree, niveau, sort_crochetage, empoisonne) qui retourne True si le coffre s'ouvre, et False sinon.

def coffre_ouvrable(cle_doree, niveau, sort_crochetage, empoisonne):
    # A vous de jouer !
    ...


# Tests
print(coffre_ouvrable(True, 8, False, False)) # False (niveau trop bas et pas de sort)
print(coffre_ouvrable(True, 12, False, True)) # False (empoisonné)
print(coffre_ouvrable(True, 5, True, False))  # True (a le sort et la clé, pas empoisonné)
Solution :

(Contenu masqué)

@6 Le Boss Final (ASCII + Booléens) : En Python, la fonction ord(lettre) permet d'obtenir le code ASCII d'un caractère (un entier). Par exemple, ord('A') vaut 65.

Dans notre système, un caractère est considéré comme une "Lettre standard" si son code ASCII correspond à une Majuscule (entre 65 et 90 inclus) OU à une Minuscule (entre 97 et 122 inclus).

Complétez la condition de la fonction est_lettre_standard(caractere) en combinant la fonction ord(), des comparaisons et des opérateurs booléens.

def est_lettre_standard(caractere):
    code = ord(caractere)

    # Complétez la ligne ci-dessous !
    if (code >= ... and code <= ...) or ( ... ) :
        return True
    else:
        return False

# Tests
print(est_lettre_standard("F")) # True (code 70)
print(est_lettre_standard("m")) # True (code 109)
print(est_lettre_standard("?")) # False (code 63)
print(est_lettre_standard("9")) # False (code 57)
Solution :

(Contenu masqué)