TP Python – Premiers programmes Python
BTS SIO SISR 1re année – Mathématiques pour l'informatique – S03
Note
Comment ce TP fonctionne. Chaque exercice a un éditeur Python intégré à la page (il s'exécute dans ton navigateur, rien à installer). Avant de lancer, écris sur ta feuille ce que tu anticipes (« J'anticipe »). Puis lance et compare. Le bouton Valider exécute des tests : un test réussi ne dispense pas de comprendre pourquoi.
Exercice A – Droits d'accès avec des masques
On code lecture = 4, écriture = 2, exécution = 1. Complète les trois fonctions avec des opérateurs bit à bit.
J'anticipe. Que doivent renvoyer ajouter(5, 2), retirer(7, 4) et accorde(6, 1) ? Pose les écritures binaires sur ta feuille.
LECTURE = 4bksl-nlECRITURE = 2bksl-nlEXECUTION = 1bksl-nlbksl-nldef ajouter(droits, masque):bksl-nl """Ajoute le(s) droit(s) du masque."""bksl-nl return ...bksl-nlbksl-nldef retirer(droits, masque):bksl-nl """Retire le(s) droit(s) du masque."""bksl-nl return ...bksl-nlbksl-nldef accorde(droits, masque):bksl-nl """Renvoie True si tous les bits du masque sont à 1 dans droits."""bksl-nl return ...bksl-nlbksl-nl
Je comprends. Pourquoi retirer utilise-t-il ~masque ? Que se passe-t-il si on retire un droit qui n'était pas accordé ?
Exercice B – Année bissextile
Écris est_bissextile(annee). Les cas limites 1900, 2000 et 2100 sont dans les tests.
def estpy-undbissextile(annee):bksl-nl """Renvoie True si l'année est bissextile."""bksl-nl ...bksl-nlbksl-nl
Exercice C – Adresse privée
Écris adresse_privee(adresse) qui reçoit un texte "a.b.c.d" et renvoie True pour les plages privées de l'exercice 6.
def adressepy-undprivee(adresse):bksl-nl """Renvoie True si l'adresse IPv4 (texte) est privée."""bksl-nl octets = adresse.split(".")bksl-nl a = int(octets[0])bksl-nl b = int(octets[1])bksl-nl ...bksl-nlbksl-nl
Exercice D – Adresse de réseau
Écris adresse_reseau(adresse, masque) qui renvoie l'adresse de réseau sous forme de texte, octet par octet, avec &.
def adressepy-undreseau(adresse, masque):bksl-nl """Adresse de réseau (texte) : ET bit à bit, octet par octet."""bksl-nl a = adresse.split(".")bksl-nl m = masque.split(".")bksl-nl resultat = []bksl-nl for i in range(4):bksl-nl resultat.append(str(...)) # à compléter : ET bit à bit des deux octets (entiers)bksl-nl return ".".join(resultat)bksl-nlbksl-nl
Je comprends. Vérifie à la main un des tests, en binaire.
Exercice E – Jours dans un mois
Écris jours_du_mois(mois, annee) (mois de 1 à 12). Tu peux réutiliser est_bissextile.
def estpy-undbissextile(annee):bksl-nl return (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0bksl-nlbksl-nldef jourspy-unddupy-undmois(mois, annee):bksl-nl """Nombre de jours du mois (1 à 12) de l'année donnée."""bksl-nl ...bksl-nlbksl-nl