Académique Documents
Professionnel Documents
Culture Documents
CORRIGÉ
P Y T H O N
Spécial SNT
Notions et outils
Exercices
Travaux pratiques
+
foucherconnect.fr/1218765
2
de
PY T H O N
Spécial SNT
CORRIGÉ
Hassan Dibesse
Professeur de sciences de l’ingénieur,
lycée Lesage, Vannes (56)
Patricia Kerner
Professeure de sciences de l’ingénieur, NSI, SNT
lycée Yves Thépot, Quimper (29)
Yannig Salaun
Professeur de mathématiques, NSI, SNT,
formateur académique,
lycée de l’Elorn, Landerneau (29)
Crédit photographique
p. 2 © python, © Vittascience ; p. 6 © blankstock / stock.adobe ; p. 9 ph © accogliente / stock.
adobe.com ; p. 11 ph © mr green / stock.adobe.com ; p. 13 ph © Lost_in_translation / stock.
adobe.com ; p. 16 ph © Oleksii / stock.adobe.com ; p. 29 ph © IDOL’foto / stock.adobe.com ;
p. 31 ph © Artem Varnitsin / stock.adobe.com ; p. 34 ph © Attant / stock.adobe.com ; p. 38
ph © Maksym / stock.adobe.com ; p. 44, 45, 46, 47 ph © HD
Pourquoi ?
Python est le langage informatique le plus utilisé dans le monde. Il est à la fois simple
et puissant. La programmation sur Python est le thème transversal du programme
SNT.
Capacité attendue : écrire et développer des programmes simples pour répondre à
des problèmes et modéliser des phénomènes.
Les activités proposées dans cet ouvrage permettent d’approfondir les connaissances
et compétences des élèves en programmation.
Comment l’utiliser ?
La première partie de l’ouvrage peut servir d’introduction (ou de rappel) des différentes
notions de programmation au programme de SNT. Les élèves pourront aussi s’y référer
tout au long de l’année.
La seconde partie contient des activités indépendantes liées aux thèmes du
programme. Elle peut être traitée de façon non linéaire : l’enseignant peut utiliser les
fiches en fonction de sa progression et des connaissances en programmation de ses
élèves. Certaines activités nécessitent l’utilisation d’un ordinateur (elles sont signalées
par un pictogramme), d’autres sont réalisables sur le cahier.
Pour terminer, le cahier peut être utilisé de manière autonome. C’est un outil
d’apprentissage et d’entraînement pour toute personne souhaitant approfondir ses
connaissances en programmation.
3
Sommaire
Présentation....................................................................................................3
Le web
10 Créer un serveur web............................................................................... 20
11 Créer un site dynamique........................................................................... 22
12 Valider et sécuriser un formulaire.............................................................. 24
4
Les données structurées et leur traitement
15 Dictionnaire et stockage...........................................................................30
16 Analyse des données................................................................................ 32
La photographie numérique
21 Créer une image...................................................................................... 42
22 Manipuler une image...............................................................................44
23 Agir sur les composantes RGB..................................................................46
5
21 L’environnement de travail
Notions Outils
• Un environnement de programmation • Exemple de console
Python comporte toujours 2 espaces :
– un éditeur de code qui permet de
rédiger et d’enregistrer les scripts.
– une console d’exécution qui permet
de lancer un script et d’exécuter des
instructions une à une.
• La console se reconnaît aux >>> qui
démarrent chaque ligne.
1. Sur calculatrice
Plusieurs marques proposent des calculatrices programmables
en Python (Numworks, Texas Instrument et Casio).
Des mises à jour de Python sont disponibles sur leurs sites
Internet respectifs.
Avec une calculatrice, on est limité dans l’usage des
bibliothèques.
Éditeur de code Console
6
Partie 1
Il faudra
installer certaines
bibliothèques.
Éditeur de code
Console
Exercices
print() :
1. Analyser le script et sa réponse puis donner la valeur et le type permet d’afficher
des variables a, b et c. des données.
1 a = bonjour
2 b = 15 Nom Valeur Type
3 c = True Réponse :
a « bonjour » Str
4 print(a,type(a)) bonjour <class 'str'>
15 <class 'int'> b 15 Int
5 print(b,type(b))
6 print(c,type(c)) True <class 'bool'> c True Bool
8
Partie 1
Travaux pratiques 40 mn
A. Tester et comprendre
1. Indiquer le résultat affiché par les scripts suivants.
1 d = 1 1 x = int(input("x:")) input() :
2 d = d + 2 2 plusDeux = x + 2 permet d’entrer
3 e = str(d) + "3") 3 print(plusDeux) des données.
4 print(e)
On entre 10, le script affiche :
Le script affiche : ✔ 12.
6. erreur.
123,0. 102.
✔ 33.
9
3 Les conditions (if, elif, else)
2
Notions Outils
• En Python, on utilise des structures de • if : signifie « si ». Il évalue si le
contrôle comme les conditions et les résultat du test est vrai (et retourne
boucles. True) ou faux (et retourne False).
• Un test est effectué en utilisant une • else : signifie « sinon ».
condition (ou prédicat). La condition est • elif : signifie « sinon si ».
évaluée et renvoie vrai (True) ou faux • Les conditions peuvent utiliser
(False). des opérateurs de comparaisons
(==, !=, <, >, <=, >=) et des
• Les structures conditionnelles
opérateurs logiques (not, and, or).
permettent d’exécuter des instructions
• L’indentation (espaces) : permet de
en fonction des conditions.
définir un bloc d’instructions ainsi
que les imbrications entre les blocs.
Exercices
1. Compléter le tableau, en indiquant pour chaque prédicat, s’il est vrai ou faux.
Conditions Vrai Faux
a. "7" != 7 ✔
b. 9 < 2 ✔
c. not(False) ✔
d. 6 == 4 + 2 and 6 > 8 ✔
2. Compléter le script suivant afin qu’il affiche « Admis » lorsque la note entrée est
supérieure ou égale à 10.
1 note = int(input("Note"))
2 if note >= 10 :
3 print("Admis" )
10
Partie 1
Travaux pratiques 30 mn
A. Contrôle de l’âge
• Compléter et tester le script suivant afin d’afficher un message d’accès pour
chaque catégorie d’âge.
1 age = int(input("Entrez votre âge :"))
2 if age >= 18 :
3 print("Accès à partir de 18 ans")
4 elif age >= 16 :
5 print("Accès à partir de 16 ans")
6 elif age >= 12 :
7 print("Accès à partir de 12 ans")
8 else :
9 print("Accès interdit !")
Défi ! Proposer un script qui demande la note obtenue puis affiche « Assez bien » à
partir de 12, « Bien » à partir de 14 et « Très bien » à partir de 16.
11
4 Les boucles bornées (for… in)
2
Notions Outils
• Les boucles servent à répéter plusieurs • Structure d’une boucle for :
fois une ou plusieurs opérations. 1 for i in séquence :
• Elles permettent également de parcourir 2 bloc d’instructions
des données de types chaîne de 2 fin boucle for
caractères, listes, etc.
• i va prendre les valeurs successives
• Les boucles sont dites bornées si le
de séquence.
nombre d’itérations (répétitions) est
• range(n) : fonction qui donne une
connu à l’avance. On utilise l’instruction
liste de n éléments allant de 0 à n-1.
for.
Exercices
1. Que réalisent les scripts suivants ? Cocher la bonne réponse.
a. b. 1 for i in range(3):
1 for i in range(10):
2 print(i) 2 for j in range(11):
3 print(i*j)
2. Compléter le script à l’aide des étiquettes suivantes afin d’afficher les tables de
multiplications de 0 à 9.
i,"×",j,"=",i*j ; range(10) ; for j in ; "Table de",i .
1 for i in range(10) :
2 print("Table de",i ) Les boucles
for peuvent
3 for j in range(11): s’imbriquer grâce
à l’indentation.
4 print(i,"×",j,"=",i*j )
12
Partie 1
Exercice
• Compléter le script suivant à l’aide
des commentaires (#).
13
6 Définir une fonction
2
Notions Outils
• Une fonction est une partie d’un • def nom_de_la_fonction(a,b) :
programme informatique qui accomplit permet de définir une fonction en lui
une tâche spécifique. donnant un nom et des paramètres
• Définir une fonction c’est expliquer à la (a,b). Si la fonction ne possède pas
machine ce que doit réaliser la fonction. de paramètres on écrit : def nom_de_
la_fonction (). La ligne se termine
• Une fonction qui ne retourne pas de
par : .
résultat s’appelle une procédure.
• return : retourne le résultat d’une
fonction.
Paramètres Fonction
Sortie
Exercices
1. Corriger le script de la fonction inferieur(a,b) suivante.
1 definition inferieur[a,b] 1 def inferieur(a,b) :
2 if a<b : 2 if a<b : Tout le code
contenu dans
3 renvoi True 3 return True une fonction
4 else : else : est indenté
4
d’un niveau.
5 renvoi False 5 return False
14
Partie 1
Exercice
• En utilisant les fonctions suivantes, écrire les appels de fonctions
correspondant aux actions indiquées.
1 # Appel de la fonction afficher_bonjour sans paramètre
2 afficher_bonjour() # affiche « Bonjour ! »
3 # Appel de la fonction calculer_carre avec un paramètre
4 carre = calculer_carre(3) # carre contiendra la valeur 9
5 # Appel de la fonction addition avec deux paramètres
6 somme = addition(2, 3) # somme contiendra la valeur 5
15
8 Les adresses IP
Notions Outils
• Une adresse IP sert à identifier les machines sur • randint(0,255) : la fonction
un réseau. randint(a,b) génère un
• Nous utiliserons l’IPv4, composée de 4 nombres nombre aléatoire compris
compris entre 0 et 255. entre a et b inclus.
• Exemple d’adresse IP : 192.168.0.15 • adresse = [] : adresse est
une liste vide.
• adresse.append(165) :
la fonction append ajoute
un élément dans une liste.
Exercices
1. Les adresses IP suivantes sont-elles valides ? Si non, préciser pourquoi.
Adresse IP Valide ? Si non, pourquoi ?
192.172.12.2 ✔ Oui Non
265.123.25.158 Oui ✔ Non Le premier nombre est supérieur à 255.
168.168.168.168 ✔ Oui Non
128.0.255 Oui ✔ Non Il manque un nombre.
16
Partie 2 I Internet
Travaux pratiques 30 mn
A. Création
1 def creerIP() :
Un tuple
2 #renvoie une adresse IP sous forme de 3 tuple ressemble à
4 a = 192 une liste, mais
5 b = 168 on ne peut pas
6 c = 0 le modifier
7 d = 15 une fois qu’il
a été créé.
8 return (a,b,c,d)
B. Vérification
• Dans notre cas, pour pouvoir communiquer, deux ordinateurs doivent posséder
des adresses dont les 2 premiers nombres sont identiques. Écrire une fonction
qui prend en paramètres deux adresses IP et qui renvoie True si elles sont
compatibles et False dans le cas contraire.
4 return True
5 else :
6 return False
Défi ! Écrire une fonction qui donne la liste de toutes les adresses IP possibles de la
forme 192.168.c.d où c et d sont compris entre 0 et 255.
17
9 Les serveurs DNS
Notions Outils
• DNS est l’acronyme de Domain Name • ping qwant.com : dans un terminal,
System. permet de tester la connexion avec
• Le système DNS est réalisé par un grand www.qwant.com.
nombre d’ordinateurs, répartis sur le • gethostbyname('qwant.com') :
réseau et constamment mis à jour. renvoie l’adresse IP de qwant.com.
Adresse symbolique • gethostbyaddr('194.187.168.99') :
wikipedia.com
renvoie l’adresse symbolique de
194.187.168.99.
141.94.212.184
Utilisateur naviguant Adresse Système • liste.index(a) : renvoi l’indice de
sur Internet numérique (IP) DNS
l’élément a dans la liste.
Exercices
1. Vrai ou Faux ? Cocher la bonne réponse.
Vrai Faux
a. Les navigateurs internet connaissent les adresses IP de tous
✔
les sites web qui existent.
b. Tous les ordinateurs possèdent un serveur DNS. ✔
c. Si le serveur DNS ne connaît pas l’adresse cherchée, il
✔
demande à un autre serveur DNS.
d. Les moteurs de recherche sont des serveurs DNS. ✔
18
Partie 2 I Internet
Fichiers
Travaux pratiques 50 mn /
foucherconnect.fr 23py02
A. Le module socket
1. Télécharger et exécuter le fichier adresse.py, puis noter les affichages obtenus.
>>>141.94.212.184 et >>>qwant.com.
19
10 Créer un serveur web
Notions Outils
• Un serveur web est un ordinateur qui • python -m http.server : permet de
stocke des fichiers puis les envoie (les sert) créer un serveur local sur le port 8000
à l’appareil du visiteur du site (le client). par défaut. Si non, il est possible de
• Un serveur local simule un site, dans préciser le port souhaité : python -m
les conditions réelles, sur son propre http.server numéro de port.
ordinateur. • lochost : signifie qu’on se réfère
• L'URL d'une page est l'adresse par à son propre ordinateur,
laquelle elle est accessible. correspondant à l’IP : 127.0.0.1.
• Un port est une porte d’accès donnée au • localhost:8000 : signifie serveur
serveur pour émettre et recevoir. local sur le port 8000.
• HTTPServer et HTTPRequestHandler :
Clients Serveur web
index.html modules de Python permettant de
Réseau gérer les échanges entre utilisateur et
image.jpg
serveur.
Exercices
1. Indiquer si les affirmations suivantes sont vraies ou fausses.
Vrai Faux
a. La saisie de l’URL 127.0.0.1:8000 sur le navigateur permet
✔
tester le serveur.
b. localhost:8000 et 127.0.0.1:8000 ne donnent pas le même
✔
résultat.
c. La commande python -m http.server 9999 crée un serveur
✔
local sur le port 9999.
2. On souhaite créer et tester un serveur local sur 2 ports différents.
Compléter le tableau.
Port Code dans l’invite de commande URL dans le navigateur
7777 python -m http.server 7777 127.0.0.1 : 7777
9999 python -m http.server 9999 127.0.0.1 : 9999
20
Partie 2 I Le web
Fichiers
Travaux pratiques 40 mn /
foucherconnect.fr 23py03
4.
a. Renommer le fichier index.html en test.html puis relancer le serveur.
Résultat attendu :
Serveur en service…
127.0.0.1 - - [date et heure] "GET / HTTP/1.1" 404 -
b. Tester sur le navigateur avec la bonne URL.
Résultat attendu :
Oups… Erreur 404 !
c. Modifier la ligne la ligne 29 pour afficher le message d’erreur suivant :
Fichier introuvable !
21
11 Créer un site dynamique
Notions Outils
• Un site dynamique permet de • request.form[] : récupère le contenu
générer du contenu web en fonction d’un formulaire.
de l’utilisateur. • flash() : envoie des messages courts
• Flask est un ensemble d’outils dans le navigateur, nécessite une clé de
logiciels (framework) permettant la sécurité (app.secret_key).
création d’applications web simples • render_template() : permet au moteur
et dynamiques. de modèles 'templates' Jinja2 d’exécuter
• Une route est un chemin d’accès des fichiers html contenant de la logique.
permettant de créer une URL et de la • @app.route('/') : crée l’URL '/' (racine
lier à une fonction. du site).
Exercices
1. Le script suivant permet de créer une page web simple affichant « Bonjour ! ».
Relier chaque action à la ligne la réalisant.
• 1 from flask import Flask
a. Retourne le texte « Bonjour ! » • • 2 app = Flask(__name__)
b. Crée la route '/' • • 3 @app.route(‘/’)
c. Crée une fonction liée à la route '/' • • 4 def index():
• 5 return "Bonjour !"
22
Partie 2 I Le web
Fichiers
Travaux pratiques 40 mn /
foucherconnect.fr 23py04
La fonction render_template
23
12 Valider et sécuriser un formulaire
Notions Outils
• Le contenu d’un formulaire peut être • re.fullmatch(regex,exp) : vérifie
inexploitable ou contenir du code la correspondance de l’expression exp
malveillant. avec le modèle regex.
• Une expression régulière RegEx • [a-zA-Z0-9] : ensemble des
(Regular Expression), est un ensemble de caractères alphanumériques.
caractères appelé pattern (motif) qui sert • {m,n} : délimiteur, répète entre m et n
à vérifier si une expression correspond au fois. {m,} répète m fois ou plus.
modèle décrit. Bien qu’insuffisantes, elles
• re.compile() : permet de réutiliser
permettent de valider et sécuriser un
efficacement un modèle plusieurs fois
formulaire côté serveur.
en évitant de le réécrire.
Exercices
1. Le script ci-dessous demande un prénom et indique s’il est valide.
Les prénoms suivants sont-ils valides ?
1 import re
2 prenom = input("Entrer un Prénom Valide ?
prénom :")
Gwennaelle Oui ✔ Non
3 pattern = r'[A-Za-z]{2,8}'
4 if re.fullmatch(pattern, Mehdi ✔ Oui Non
texte): Jean-Pierre Oui ✔ Non
5 print(prenom, "valide")
Prénom Valide ?
Pierre-Mickaël ✔ Oui Non
Anne Elise ✔ Oui Non
Clém17 Oui ✔ Non
A Oui ✔ Non
24
Partie 2 I Le web
Fichiers
Travaux pratiques 40 mn /
foucherconnect.fr 23py05
A. Sécuriser le formulaire
1. Un utilisateur saisit son prénom et son email afin de s’inscrire à une newsletter.
Le script suivant vérifie les données entrées. Saisir et tester le script.
1 import re
2 prenom = input("Entrez votre prénom :")
3 email = input("Entrez votre email:")
4 regex1 = re.compile(r'[a-zA-Z]{3,10}')
5 regex2 = re.compile(r'[a-zA-Z0-9]{8,20}')
6 if not re.fullmatch(regex1, prenom):
7 print("Prénom non vaide !")
8 elif not re.fullmatch(regex2, email):
9 print("Email non valide !")
10 else :
11 print("Votre demande est enregistrée !")
Pierre pierre@mail.fr ✔
Julie Julie17mail ✔
3. Modifier la regex1 pour tenir compte des prénoms accentués. Tester à nouveau
avec Maël et mael14@mail.fr. Quelle est alors la réponse obtenue ?
Email non valide !
4. Télécharger le dossier projet2, créer un environnement de développement en y
installant Flask. Lancer le script dans le cmd puis tester la page web sur l’URL
127.0.0.1:5000 de votre navigateur.
5. Tester avec un email invalide. Le navigateur bloque, inspecter la page, modifier
le type de email à text puis valider. La sécurisation côté client (navigateur) est
contournée, on peut injecter ce qu’on veut dans le champ et valider.
<input type= « text » placeholder= « Email » name= « email_input »>
25
13 Identification et
authentification
Notions Outils
• S’identifier revient à donner son nom. • random.choice("abcdefg") :
• S’authentifier consiste à prouver que tirage aléatoire d’un caractère dans
l’on est bien cette personne. abcdefg.
1 Identification CONNEXION • liste.index(a) : renvoie l’indice
Qui êtes-vous ? Identifiant de l’élément a dans la liste.
Mot de passe
2 Authentification
Prouvez-le ! Se connecter
Exercices
1. Pour chaque élément du tableau, indiquer s’il s’agit d’un moyen d’identification
et/ou d’authentification.
Identification Authentification
Email ✔
Mot de passe ✔
Pseudo ✔
Empreinte digitale ✔ ✔
26
Partie 2 I Les réseaux sociaux
Fichiers
Travaux pratiques 45 mn /
foucherconnect.fr 23py06
2. Compléter puis tester la fonction mdp2() qui génère un mot de passe constitué
uniquement de voyelles, de taille aléatoire entre 10 et 20 caractères.
1 import random
2 def mdp2() :
3 motDePasse= ""
4 longueur= random.randint( 10 , 20 )
5 caracteres = " aeiouy "
6 for i in range( longueur ) :
7 motDePasse += random.choice( caracteres )
8 return motDePasse
Défi ! Écrire une fonction qui demande à l’utilisateur la taille du mot de passe à
générer ainsi que la liste des caractères à utiliser, puis génère ce mot de passe.
27
14 Les graphes
Notions Outils
• Un graphe peut servir à représenter • g=nx.Graph() : création d’un graphe g.
un réseau social. • g.add_node('A') : ajout d’un nœud.
• Distance : plus petit nombre d’arêtes • g.add_edge('A','B') : ajout d’une
reliant 2 sommets. arête.
• nx.diameter(g) : renvoi le diamètre
• Diamètre : plus grande distance dans
de g.
le graphe.
• nx.radius(g) : renvoi le rayon de g.
• Centre : sommet dont la distance • nx.center(g) : renvoi le centre de g.
max est la plus petite. • add_edges_from() : permet d’ajouter
• Rayon : distance max à partir du centre. une liste d’arêtes.
Orlane
Exercices
1. a. À l’aide du graphe d’un Youna
Lilwenn
mini réseau social ci-contre, Madenn
Orlane 2 1 2 2 2
Naïs 1 1 1 2 2
28
Partie 2 I Les réseaux sociaux
Fichiers
Travaux pratiques 45 mn /
foucherconnect.fr 23py07
A. Modifier un graphe
1. Après avoir téléchargé et exécuté le fichier graphe.py, recopier le graphe obtenu.
5
0
1
4
2
Albert
29
15 Dictionnaire et stockage
Notions Outils
• Le dictionnaire (dict) est une structure • dico={cle1:valeur1,cle2:valeur2} :
de données permettant d’associer des créer un dictionnaire dico.
valeurs à des clés et d’accéder à ces • dico[cle1] : accéder à la valeur de la
valeurs à partir de leurs clés. clé cle1 d’un dictionnaire dico.
• C’est un type de conteneur (comme les • dico[nouvelle_cle]=nouvelle_valeur :
listes et les tuple) où les valeurs sont ajouter une valeur au dictionnaire.
indexées par des clés.
• dico.keys() : permet d’obtenir la liste
• Les clés peuvent être de type : chaînes des clés.
de caractères, entiers, flottants, tuple.
• dict(liste) : permet de créer un
• Les valeurs peuvent être de tout type. dictionnaire à partir d’une liste.
Exercices
1. Indiquer les dictionnaires créés par le script suivant et identifier leurs clés et
leurs valeurs.
1 dico1 = {"chat":2,"chien":1}
2 dico2 = {"chat": ("cat","gato"),"chien":("dog","perro")}
3 dico3 = {x:x**2 for x in range(1,4)}
2. Le script suivant crée et affiche un dictionnaire ayant pour clé des entiers de 1 à
7 et pour valeur les jours de la semaine.
1 jours="lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"
2 for i in range(len(jours)):
3 dico.update({i+1:jours[i] }) Len() : permet
4 print(dico) d’obtenir la longueur
d’une liste.
a. Compléter le script.
b. Affichage obtenu : {1: "lundi"} {2: "mardi"} {3: "mercredi"} {4: "jeudi"} {5: "vendredi"}
{6: "samedi"}
30
Partie 2 I Les données structurées et leur traitement
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py08
A. Informaticien
1 informaticien = {"nom":"Turing","prenom":"Alan","naissance":1912,
"mort":1954}
2 print(informaticien ["prenom"] )
3 print(informaticien["naissance"] )
4 informaticien["nationalite"]= "anglaise"
5 print(informaticien)
1. Compléter les lignes 2 et 3 du script afin qu’il affiche les valeurs prenom et
naissance.
2. Alan Turing est de nationalité anglaise. Compléter la ligne 4 pour ajouter cette
information au dictionnaire.
3. Tester le script obtenu pour vérifier vos réponses.
B. Moyenne
1. Le script suivant crée un dictionnaire contenant les
moyennes obtenues (valeurs) dans chaque matières (clés)
par Zeynep, une élève de seconde. Le compléter afin
d’afficher la liste des matières.
1 resultats = {"snt":18,"maths":17,"svt":14,"français":14,"lv1":8,"HG":11}
2 for i in resultats.keys() :
3 print(i)
Matière Notes
lv2 10
physique-chimie 16
SES 9
Défi ! Écrire un programme qui affiche les matières avec plusieurs notes, les
moyennes par matière et la moyenne générale d’un élève.
31
16 Analyse des données
Notions Outils
Définition • Pandas : bibliothèque contant des
• Pour le stockage et l’analyse de données outils pour manipuler des données
structurées on utilise des fichiers au structurées vers des fichiers de formats
format CSV (comma separated values). différents tels CSV.
• Ce format universel permet de visualiser • Pandas.read_csv("fichier.csv") :
des données séparées par une virgule. permet de lire les données du fichier
Certains fichier CSV utilisent d’autres fichier.csv dont le séparateur est la
séparateurs (tabulation, point-virgule…). virugle.
• La première ligne de ces fichiers • pandas.read_csv("fichier.csv",
CSV contient les descripteurs. Ils sep= ";") : lorsque le séparateur du
correspondent à l’entête d’un tableau et ficher cvs n’est pas une virgule on
informent sur le contenu des colonnes. l’indique sep= ";".
Exercices
1. L'extrait suivant présente les premières lignes du fichier informaticien.csv.
Nom,Prénom,Date de naissance,Genre
Jacquard,Joseph-Marie,07/07/1752,M
Boole,George,02/11/1815,M
Lovelace,Ada,10/12/1815,F
32
Partie 2 I Les données structurées et leur traitement
b. Indiquer la correction à apporter à la ligne 4 afin de n’afficher que les prénoms des
informaticiennes.
print(recherche)
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py09
Zyna .
Il affiche la liste des prénoms donnés dans le Finistère (29) triée par nombre.
Défi ! Écrire un programme qui affiche pour une année choisie, dans un
département choisi, quels ont été les prénoms les plus donnés aux filles puis aux
garçons en utilisant le fichier departement.csv.
33
17 Les cartes numériques
Notions Outils
• OpenStreetMap est un projet de • Folium : bibliothèque ajoutant
cartographie libre du monde utilisant des fonctionnalités permettant de
le système GPS et d’autres données concevoir des cartes interactives.
libres. • Cordonnée : latitude, longitude.
• Le système GPS (Global Positioning
System) permet à un appareil équipé
d’une puce GPS de déterminer sa
position (latitude, longitude et altitude).
Exercices
1. Dans OpenStreetMap, utiliser la recherche pour OpenStreetMap
accéder aux coordonnées suivantes et indiquer le lieu /
foucherconnect.fr 23py10
correspondant.
Coordonnées Lieu
48.92462, 2.36018 Stade de France
34
Partie 2 I Localisation, cartographie et mobilité
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py11
B. Visiter Paris
1. Télécharger le fichier louvre.py et compléter le script afin de créer une carte
centrée sur le musée du Louvre.
2. Améliorer le script afin de réaliser un zoom en modifiant la ligne 4 avec
l'introduction suivante.
4 c=folium.Map(location=[latLouvre,longLouvre],zoom_start=12)
6. Compléter le programme afin d’ajouter des popup indiquant le lieu sur chaque
marqueur.
35
18 La trame NMEA
Notions Outils
• La trame NMEA est un protocole • Liste=Trame.split(',') : exploite
permettant aux marins de communiquer le format particulier de la trame dont
des informations de géolocalisation. Elle les informations techniques sont
se présente sous forme d’une chaîne de séparées par une virgule. On obtient
caractères séparée par une virgule. une liste de chaînes de caractères.
$GPRMC,094040.000,A,2403.6319,N,12036.0099,E,9.50,79.65,200318,,A*53
Exercice
• On cosidère la trame NMEA suivante :
$GPRMC,180522.230,A,4329.127733,N,00128.75845,W,1.07,290220,000.0,W*64
36
Partie 2 I Localisation, cartographie et mobilité
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py12
la trame NMEA.
37
19 Calculs d’itinéraires
Notions Outils
• Il existe des outils capables de calculer • pyroutelib3 : bibliothèque proposant
des itinéraires à partir du lieu de départ des outils pour calculer des itinéraires
et du lieu d’arrivée. à partir de données d’OpenStreetMap.
• Ce calcul d’itinéraire repose sur des • router.findNode(latitude
algorithmes permettant d’obtenir le longitude) : permet de déterminer
chemin le plus court entre deux points. un sommet (un point sur la carte) de
• Par exemple, l’algorithme de Dijkstra coordonnées (latitude, longitude).
travaille sur des graphes dont chaque • router.doRoute(debut,fin) :
ville est un sommet et chaque route est permet de déterminer un itinéraire
une arête. entre deux points indiqués.
Exercice
• Compléter le script suivant afin afficher l’itinéraire à
emprunter en voiture pour se rendre de la ville de Véronnes
(47.5339,5.2291) à la ville de Chazeuil (47.5594,5.2703).
38
Partie 2 I Localisation, cartographie et mobilité
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py13
A. Calculer un itinéraire
1. Télécharger le script itinéraire1.py et le compléter afin d’afficher le nombre de
points de l’itinéraire.
Len() :
23 print("cet itinéraire contient ",len(routeLatLon),
permet d’obtenir
"points de coordonnées :") la longueur
d’une liste.
2. Intégrer au script la fonction suivante afin d’afficher les coordonnées
de chaque point de l’itinéraire.
1 def aff_coord(liste):
2 print("cet itinéraire contient ",len(liste)," points de
coordonnées :")
3 for i in range(len(liste)):
4 print("point ",i+1," : ",liste[i])
C. Tracer un itinéraire
1.Télécharger et exécuter le script itineraire3.py. Que permet ce script ?
Affiche un tracé rouge et plusieurs repères de couleurs différentes.
39
2O Acquisition de données
et IHM
Notions Outils
• Une interface Homme-Machine • from microbit import * : importer
(IHM) est un ensemble de dispositifs les fonctions de la bibliothèque microbit
physiques (écran tactile, boutons) permettant de programmer la carte
et logiciels (interface graphique) • display.show() : créer un affichage
permettant à une personne sur le pavé à led. Cela peut être un
d’échanger des informations avec caractère ou des images intégrées dans
une machine. la bibliothèque microbit. Par exemple : un
• L’acquisition de données consiste cœur (Image.HEART), un sourire (Image.
à relever à l’aide de capteurs des HAPPY), une grimace (Image.SAD).
données physiques (température, • display.scroll() : créer un affichage
pression sur un bouton…) et à les défilant sur le pavé à led.
transformer en données utilisables
• sleep(1000) : pause de 1 seconde.
par l’IHM.
• display.clear : éteint le pavé de leds.
Exercices
1. Recopier le script suivant sur une interface micro:bit. Indiquer l’affichage obtenu.
1 from microbit import *
2 while True:
3 display.show(Image.HAPPY)
4 sleep(1000)
3. Compléter le script afin d’afficher un sourire lors d’un appui sur le bouton A
sinon une grimace.
5 else:
6 display.show(Image.SAD)
40
Partie 2 I Informatique embarquée et objets connectées
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py14
41
21 Créer une image
Notions Outils
• Une image est définie (définition) par sa • Image est un module de Pillow.
largeur (L) et sa hauteur (H), ce qui correspond • img = Image.new(“RGB”, (L,H),
au nombre de pixels la composant (L x H). (r,v,b)) : crée une image et la
• On crée une image en précisant ses stocke dans la variable nommée img.
dimensions ainsi que la couleur de chaque • img.putpixel((x,y),(r,v,b)) :
pixel. permet de modifier un pixel.
• En mode RGB ou RVB, chaque pixel est • img.paste() : permet de coller une
obtenu par un mélange de rouge, vert et image sur une autre image.
bleu. Chaque couleur peut prendre une
• img.show() : affiche l’image.
valeur entre 0 à 255.
(0,0) x
Exercices
1. Le script suivant permet de créer l’image de 6 x 5 pixels ci-contre.
Compléter les commentaires indiquant ce que réalise chaque ligne.
(x,1)
1 from PIL import Image
2 img = Image.new("RGB", (6,5), (255,255,255))
3 # créer une image de 30 pixels en blanc
y
4 for x in range(5):
En RGB :
5 # parcourir 5 pixels dans le sens de x
– blanc : (255,255,255),
6 img.putpixel((x,1),(0,255,0)) – noir : (0,0,0),
7 # modifier les 5 pixels de la 2ème ligne en – rouge : (255,0,0),
vert – vert : (0,255,0),
– bleu : (0,0,255).
2. Le script suivant crée une image de couleur blanche puis en modifie certains
pixels. Colorier sur l’image les cases correspondants aux pixels modifiés en
utilisant la bonne couleur.
1 from PIL import Image
2 img = Image.new("RGB", (6,5), (255,255,255))
N
3 for y in range(1,5): N
4 img.putpixel((4,y),(0,0,0)) B B B B
5 for x in range(2,6): N
6 img.putpixel((x,3),(0,0,255))
42
Partie 2 I La photographie numérique
Travaux pratiques 40 mn
B. Créer un logo
On souhaite créer le logo suivant. Pour cela, on utilise le
module Image de Pillow en créant une image avec des bandes
de couleurs (blanche, rouge, noir et bleu) sur un fond vert.
1 from PIL import Image
2 img = Image.new("RGB", (500,350), (0,255,0))
3 bande1 = Image.new("RGB", (250,50), "white")
4 bande2 = Image.new("RGB", (50,250), "red")
5 img.paste(bande1,(0,100))
6 img.paste(bande2,(100,0))
7 img.show()
43
22 Manipuler une image
Notions Outils
• Il est possible de charger une image, • img=Image.open() : permet d’ouvrir
d’obtenir ses dimensions (size), son une image et de la stocker dans img.
format (jpg, png, etc.) ou son mode • img.show() : affiche l’image stockée
(RGB par exemple). dans img.
• On peut également, rogner une image, • img.resize() : redimensionne
changer sa définition et lui faire faire une l’image stockée dans img.
rotation.
• img.crop() : rogne l’image stockée
• La méthode img.crop((xa,ya,xb,yb)) dans img.
découpe l’image chargée dans la variable
• img.rotate() : fait tourner l’image
img selon un rectangle dont la diagonale
stockée dans img.
se situe entre les points a et b de
• img.save() : enregistre l’image
coordonnées (xa,ya) et (xb,yb).
stockée dans img.
Exercices (0,0)
1. Compléter la ligne 6 du script afin de découper
l’image ci-contre en un rectangle dont
la diagonale passe entre (0,0) et (1200,2448).
2. Compléter les commentaires sous chaque ligne
du script afin d’indiquer ce qu’elle réalise.
1 from PIL import Image
2 img = Image.open("lorient.jpg")
3 # charger l’image dans la variable img
4 print(img.format, img.size, img.mode) (1200,2448)
6 im2 = img.crop((0,0,1200,2448))
7 # découper une image
8 im2.show()
9 # afficher l’image découpée
10 im2.save("im2f23ex.jpg")
11 # enregistrer l’image découpée
44
Partie 2 I La photographie numérique
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py15
img.show()
im2 = img.resize((326,244))
im3 = img.crop((500,0,2500,2448))
im4 = img.rotate(45)
45
23 Agir sur les composantes RGB
Notions Outils
• Le pixel, plus petit élément d’une image, • img.convert(‘L’) : convertit en gris
est composé d’un mélange de rouge, l’image stockée dans img.
vert et bleu. On parle de composantes • img.split() : retourne les bandes
RGB (red, green, blue) ou RVB (rouge, RVB l’image.
vert, bleu) d’une image. • img.merge() : fusionne les 3 canaux
• Une image est obtenue par le mélange l’image.
(la fusion) de 3 images différentes • img.getpixel() : obtient les pixels
représentant chacune un canal (rouge, de l’image.
vert et bleu). • img.putpixel() : modifie les pixels
de l’image.
Exemple du canal vert d’une image :
• img.split() : stocke dans un tuple
les canaux de l’image dans l’ordre :
rouge, vert et bleu.
• Image.merge() : crée une nouvelle
image en fusionnant 3 canaux dans
l’ordre souhaité.
Exercices
1. Analyser le script suivant et indiquer le nom de chaque image obtenue.
1 from PIL import Image
2 img = Image.open("fleurs1.jpg")
3 im1 = img.convert('L')
4 r, v, b = img.split()
5 im2 = Image.merge("RGB", (b,v,r))
Image
obtenue
46
Partie 2 I La photographie numérique
Fichiers
Travaux pratiques 30 mn /
foucherconnect.fr 23py16
Aide
Utiliser des tests multiples (if, elif, else) :
– Si x < largeur/2 et y < hauteur/2 (premier carré) :
conserver les couleurs d’origine : img.putpixel((x,y),(r,v,b))
– Sinon si : deuxième carré
intervertir le bleu et le rouge : img.putpixel((x,y),(b,v,r))
– Sinon si : troisième carré
47
NB-SB-CC/VO
Profite des ressources numériques
GRATUITES de ce manuel !
www.editions-foucher.fr