Concepts fondamentaux en informatique
Concepts fondamentaux en informatique
2025–2026
Historique
Feuille de route
INTRODUCTION v
2 NOTIONS D’ALGORITHMIQUE 25
2.1 Introduction à l’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Démarche pour la résolution d’un problème . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 Quelques bonnes pratiques de programmation . . . . . . . . . . . . . . . . . . . . . 35
iii
iv SOMMAIRE
6 BASES DE DONNÉES 90
6.1 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.2 Language SQL et systèmes de gestion des bases de données (SGBD) . . . . . . . . 96
6.3 Gestion avancée des bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.4 Python et les bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.5 Administration de SQLite à l’aide d’un système de gestion de base de données (SGBD)106
A EXERCICES 120
A.1 Les systèmes informatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
A.2 Notions d’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
A.3 Concepts généraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
A.4 Modules Python clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
A.5 Sites web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A.6 Bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
A.7 Devenir expert en programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
RÉFÉRENCES 181
INTRODUCTION
Avant-propos
L’évolution rapide des ordinateurs a fait exploser la production et l’échange de données, im-
pliquant dans son sillage une amélioration quasi exponentielle des techniques de communica-
tion 1 . Face aux défis mondiaux que cela implique, tous les pays et plus particulièrement l’Eu-
rope se doit de possèder une éducation moderne et une constance recherche de qualité, voir
d’excellence. Les compétences de base enseignées ne peuvent pas, dans ce contexte, se passer
de l’informatique, essentielle dans notre vie quotidienne et professionnelle.
Preface
Présentation
Concernant plus spécifiquement la programmation, bien que le langage Python ne soit plus
tout jeune, ce n’est que récemment qu’il a fait son entrée dans les écoles jusqu’à constituer ac-
tuellement une véritable tendance dans de nombreuses institutions. Cela tient probablement
au fait que Python, est d’un apprentissage relativement aisé mais également du fait qu’il ne
v
vi INTRODUCTION
requière que très peu de ressources machines (il tourne très bien sur des micro-systèmes, comme
les Rasberry).
— La syntaxe est clair, Python 3 est en effet conçu pour être facile à lire et à écrire, même
pour des personnes (et peut-être surtout) pour des débutants
— L’apprentissage des algorithmes est crucial pour comprendre comment résoudre efficace-
ment des problèmes (à l’aide de la programmation ou non)
— Python possède un large éventail de modules et de bibliothèques qui élargissent les ca-
pacités du langage de base et permet aux apprenants d’explorer divers domaines tels
que l’analyse de données, l’intelligence artificielle, le développement web, etc.
— Python 3 est maintenant facilement portable et compatible avec la plupart des systèmes
d’exploitation
Ces différents points éclairent, je l’espère, les raisons qui m’ont amenés à rédiger, sur la base
de quelques éléments, comme les supports de cours sur l’algorithmique [Solnon, 2007], ensei-
gnante à l’Institut National des Sciences Appliquées (INSA) de Lyon, sur Python [Bonjour, 2021] 2 ,
enseignant et responsable informatique à la Faculté de l’environnement naturel, architectu-
ral et construit (ENAC) de l’École polytechnique fédérale de Lausanne (EPFL), du manuel in-
teractif en ligne [Arnold et al., 2022], développé par J. Arnold de la Haute École Pédagogique
de Berne, T. Kohn à l’époque de sa thèse à l’École polytechnique fédérale de Zürich (ETHZ),
en colaboration avec A. Plüss, enseignant d’informatique à l’Université de Berne. J’ai égale-
ment souvent utilisé chatGPT, afin de me fournir, rapidement, soit des simplification / vulga-
risation de supports, soit pour me permettre de rédiger plus rapidement ce support à l’aide de
LATEX.
2. Pour la petite histoire, J.D. Bonjour m’a fait découvrir les joies de l’informatique, à l’EPFL, quand, j’avais
un vingtaine d’années
vii
Cet ouvrage n’est pas protégé par des droits d’auteurs particuliers et peut être reproduit li-
brement pour un usage personnel ou en classe. Les textes et programmes présents dans cet
ouvrage peuvent donc être utilisés sans référence à leur source pour autant que ce soit dans
un but non lucratif.
viii INTRODUCTION
Plan de formation
· Entiers et réels et 72
· Caractères
— Opérations de base (+, -, etc.)
ix
3e — Tableaux d’articles 8 p. 79
— Objets avec attributs, méthodes et héritages
— Surcharge et le polymorphisme des objets
x INTRODUCTION
— Retour de fonction et 71
2e Analyse montante/descendante 6 p. 26
LES SYSTÈMES
INFORMATIQUES
E T I A N M S U R W D K G
. - .. .- -. -- ... ..- .-. .-- -.. -.- --.
O V L F P J B X C Y Z Q H
--- ...- .-.. ..-. .--. .--- -... -..- -.-. -.-- --.. --.- ....
Dans cette partie introductive du cours d’informatique, nous traiterons plus particulièrement
des interfaces qui permettent les interactions de l’être humain avec les machines et du fonc-
tionnement de ces systèmes, permettant ainsi l’encodage et la sauvegarde des données.
1
2 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
Interface graphique
En anglais GUI, pour Graphical User Interface, ce type d’interface s’oppose à l’interface en
ligne de commande. Les parties les plus typiques en sont le pointeur de souris, les fenêtres,
le bureau, les icônes. Les contrôles graphiques sont utilisés pour interagir avec l’utilisateur :
icônes, boutons, menus et barres de défilement sont les plus fréquemment utilisés.
App App
Formulaire (entrée/input) OK
Tél. Photo
Statut : affichage ok
Progiciel système
Un progiciel (de programme et logiciel) est un ensemble de programmes conçus pour être four-
nis à différents utilisateurs en vue d’une même application ou d’une même fonction (définiton
Larousse).
Un système d’exploitation (en anglais Operating System ou OS) est un ensemble de programmes
responsables de la liaison entre les ressources matérielles d’un ordinateur et les applications
informatiques de l’utilisateur (traitement de texte, jeux vidéo, etc.).
Sur le bord inférieur de l’écran se trouve la barre des tâches dont l’élément le plus important
est le bouton Démarrer, en bas à gauche.
Poste de travail
Curseur de souris
Rendu
Corbeille
Menu Windows
Le saviez-vous ? Les logiciels métiers ne sont pas des progiciels, mais des programmes conçus
pour répondre aux besoins spécifiques d’une profession ou d’un secteur particulier, comme un
4 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
logiciel de gestion de cabinet médical, ou un logiciel de dessin assistée par ordinateur (DAO).
Les progiciels, eux, sont des systèmes qui répondent à des besoins généraux de gestion d’en-
treprise, comme les systèmes d’exploitation, souvent utliser pour gérer des processus trans-
versaux dans une organisation, ce qui inclut par exemple les ERP (Enterprise Resource Plan-
ning) ou les CRM (Customer Relationship Management). Les logiciels comme MS Word ou
Excel, sont regroupés dans une catégorie plus large, nommée générique : ils ne sont en effet
pas spécifiquement adaptés à un secteur ou une profession.
Explorateur Windows
C’est un peu comme la carte du contenu de votre ordinateur : il permet de naviguer à travers
les fichiers et dossiers stockés sur votre machine ou des disques réseaux. Imaginez votre ordi-
nateur comme une grande armoire avec différents tiroirs et classeurs. Chaque classeur (dos-
sier) peut contenir d’autres classeurs ou des feuilles individuelles (fichiers). L’Explorateur vous
aide à organiser, trouver et ouvrir ces classeurs et feuilles.
Voyons maintenant comment créer des fichiers, des dossiers avec en prime quelques petits
trucs et astuces. Pour créer un dossier :
1. Ouvrir l’Explorateur
2. Sélectionner la destination Naviguer dans l’arborescence jusqu’à être là où vous voulez
travailler
3. Cliquez-Droit Placer le curseur de souris dans une zone sans dossier ni fichier, réaliser
un clic droit et choisir "Nouveau dossier".
4. Nommez-le : Votre nouveau dossier apparaîtra avec un nom par défaut comme "Nouveau
dossier". Tapez le nom que vous souhaitez et appuyez sur Entrée.
On procédera de la même façon pour créer un nouveau fichier. Avant d’étudier plus avant d’autres
logiciels, ci-après quelques trucs et astuces...
Trucs et astuces
Copier / coller L’Explorateur rend très facile le déplacement de fichiers d’un dossier à un
autre. Vous pouvez copier, couper et coller (Ctrl + C, puis Ctrl + V) dans les répertoires de tra-
1.1. SOFTWARES (LOGICIELS) 5
vail désiré. Attention toutefois aux droits d’utilisation, contrairement à votre espace personel,
ceraines zones sont réservées : vous ne pourez ni y renommer, ni y coller vos fichiers / réper-
toires.
Attention avec la touche "Suppr" ! Si un fichier ou un dossier situé sur un disque réseau,
le supprimer l’effacera définitivement... il se trouvera dans la corbeille uniquement si c’était
un fichier stocké en local sur votre ordinateur.
Recherche Si vous ne savez plus où se trouve un fichier ou un répertoire, vous pouvez utili-
ser le caractère générique * pour effectuer votre recherche. Par exemple, si vous recherchez
tous les travaux pratiques (fichiers ou répertoires) qui contiennent l’acronyme "TP", vous pou-
vez écrire *TP*.
De la même manière, si vous ne vous souvenez que de l’extension d’un fichier, vous pouvez
rechercher tous les fichiers avec cette extension en utilisant *.pdf au début. Cela affichera
tous les fichiers PDF dans un répertoire donné.
Téléchargements Lorsque vous naviguer sur le web, les fichiers téléchargés sont enregis-
trés dans le dossier de téléchargement...
Outils génériques
Microsoft Word est un logiciel de traitement de texte qui permet de créer, modifier et mettre
en forme des documents tels que des lettres, des rapports, des brochures, etc. Il offre de nom-
breuses fonctionnalités comme la vérification orthographique, l’insertion d’images, de tableaux
et des mises en page avancées. Voir le paragraphe suivant pour connaître les extensions utili-
sées par ce logiciel.
Excel est un tableur utilisé pour organiser, analyser et visualiser des données sous forme de
tableaux et de graphiques. Il est particulièrement utile pour effectuer des calculs, créer des
budgets, suivre des finances et bien plus encore grâce à des fonctions intégrées. Voir le para-
graphe suivant pour connaître l’extension utilisée par ce logiciel.
Navigateurs web
L’école met à disposition trois outils de navigatin web, relativement similaires : Microsoft Edge,
Google Chrome et Mozilla Firefox.
— Chrome est un navigateur web développé par Google, réputé pour sa rapidité et son in-
tégration avec les services Google.
— Firefox, développé par Mozilla, est connu pour sa protection fort de la vie privée et sa
flexibilité ; contrairement à Chrome, Firefox est open-source et met l’accent sur l’utilisa-
teur plutôt que sur les services connectés
Les moteurs de recherche et les IA génératives sont tous deux basés sur des logiciels
complexes, mais généralement intégrés aux navigateurs web, ce qui justifie leur intégration
ici. Les moteurs de recherche, tels que Google Search et Microsoft Bing, permettent aux utili-
sateurs de trouver des informations sur le web en entrant des mots-clés ou des requêtes, basé
sur le profil des utilisateurs, utilisant en parrallèle des intéligences artificielles afin d’amélio-
rer l’expérience de ses utilisateurs.
ATTENTION L’utilisation d’une IA, tout comme celle de sources d’information, doit être sys-
tématiquement mentionnée et citée.
Comme expliqué à la page précédente, les outils de traitements de texte permettent d’éditer
et structurer des documents avec des options de mise en forme avancées. Ils facilitent grande-
1.1. SOFTWARES (LOGICIELS) 7
Tableurs
Les tableurs permettent de manipuler, organiser et analyser des données. Ils offrent en outre
des fonctionnalités pour le calcul et créer des graphiques.
— .xlsx Utilisé par Microsoft Excel, c’est votre format de prédilection pour les tableaux, les
graphiques et les calculs ; Google Sheets permet aussi de travailler sur ce format
— .csv Comma-Separated Values ; c’est un fichier texte qui peut aussi être lu par des ta-
bleurs (il est super pour les données simples) !
— .ods Utilisé par OpenOffice Calc, encore une fois, une alternative gratuite
— .numbers Également spécifique à Apple
La PAO permet de créer des documents (présentations, magazines, brochures ou affiches) vi-
suellement complexes.
— .psd Utilisé par Adobe Photoshop ; si vous êtes un artiste en herbe, c’est ce que vous uti-
liserez probablement
— .indd Adobe InDesign utilise ce format ; parfait pour le design de magazines, brochures,
etc.
— .pptx PowerPoint, aussi utilisé pour la PAO, même si on restera ici plutôt basique
— .odp OpenOffice Impress, l’alternative gratuite
— .key Pour les utilisateurs Apple, c’est le format de Keynote
Images
Vidéos
— .mp4 Le format le plus commun pour les vidéos, compatible avec presque tous les appa-
reils
— .avi Un peu plus ancien, mais encore utilisé, généralement plus gros en taille
— .mov Spécifique à Apple, mais de haute qualité
— .wmv Petit en taille, bon pour le streaming, mais surtout sous Windows
Sons
1.1.4 À retenir...
Points clés abordés
Questions récapitulatives
1. Comment les inventeurs du code Morse ont-ils optimisé la représentation des lettres ?
Fournissez un exemple précis.
2. Quelle est la différence entre le système d’exploitation et les applications ?
3. Quels sont les avantages d’une interface graphique (GUI) par rapport à une interface
en ligne de commande (CLI) ? Donnez deux exemples d’objets que l’on retrouve dans les
GUI.
4. Dans quel contexte utilise-t-on la fonction de recherche avec un caractère générique * ?
Donnez un exemple d’utilisation.
5. Qu’est-ce qu’un logiciel métier, et en quoi diffère-t-il d’un progiciel ou d’un logiciel géné-
rique ? Donnez un exemple de chaque type de logiciel.
1.1. SOFTWARES (LOGICIELS) 9
Bureau
Mobile
Systèmes
d’exploi- Suite
Sauvegarde
tation office
Navigateur
Droits
...
Applications
Sécurité
(métier)
Antivirus LOGICIELS
(SOFTWARE)
Texte
SaaS /
Licences Formats Image
Cloud
Open
Propriétaire Vidéo Audio
Source
1.2.1 Ordinateur
Dans les faits, un ordinateur est un ensemble de circuits électroniques permettant de mani-
puler des données sous forme binaire. Toute machine capable de manipuler des informations
binaires peut être ainsi qualifiée d’ordinateur.
Signaux binaires
La plupart des civilisations utilisent le système décimal. Pourquoi ? Tout simplement parce
que nous avons 10 doigts ! L’ordinateur, lui, n’a pas de doigts mais utilise l’électricité. Par consé-
quent, il ne connaît que deux types d’informations : allumé, éteint. On dit qu’il travaille dans
un système binaire, ou en base deux, constitué de deux valeurs représentées par 0 ou 1, selon
que le signal électrique est transmis ou non (aucun voltage détecté) par le transistor qui com-
pose les circuits électriques (intégré à la carte mère).
Codage de l’information
Les informations qui sont utilisées par les ordinateurs se font par groupe de 8 octets (bytes
en anglais, à ne pas confondre avec la notion de bits aussi utilisés pour représenter des vi-
tesses de transmission, par exemple lors de transferts de données). Le bit vient de la termino-
logie anglo-saxonne de binary digit : un ensemble de 8 bits est appelé un octet. Par exemple,
la lettre A est composée des huit chiffres suivants : 01000001 (à ne pas confondre avec les codes
ASII qui ne compte que sept codes binaires).
A B C D E F G H
01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000
I J K L M N O P
01001001 01001010 01001011 01001100 01001101 01001110 01001111 01010000
Q R S T U V W X
01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011000
Y Z
01011001 01011010
Systèmes logiques
X=1
Z=1
Y=1
Entrée / Sortie
D’un point de vue matériel, on distingue donc plusieurs éléments : l’alimentation, bien sûr,
la carte mère, le processeur, la mémoire vive / cache et les disques durs, mémoire morte ou
persistente. On peut également citer les cartes graphiques, sons, réseau, USB etc. qui ne sont
pas absolument indispensables au bon fonctionnement d’un ordinateur mais facilitent quand
même grandement son utilisation.
Un ordinateur récupèrera donc les instructions données via les ports d’entrée et redistribura
l’information, après traitement, via les ports de sortie définis. L’ensemble de cet environne-
ment d’entrées-sorties constitue ce que l’on nomme les périphériques : clavier, écran, enceintes
1. À titre d’exemple, une puce Apple M4 intègre environ 28 milliards de transistors, ce qui lui permet d’exé-
cuter jusqu’à 38 000 milliards d’opérations par seconde.
1.2. HARDWARE (LA MACHINE) 13
audio ou casque, imprimante, souris ou pad, disques externes, microphone, réseau Ethernet
ou wifi, etc. Certains périphériques sont par nature destinés uniquement à l’entrée de don-
nées (claviers et souris, microphones), tandis que d’autres s’occupent avant tout de la sortie
(imprimantes, écrans non-tactiles) ; d’autres permettent, à la fois, l’entrée et la sortie (disques
durs, clés USB, etc.).
Entrée / Sortie
Périphériques mixtes
(disque durs, clé USB, joysticks, tablette)
1.2.2 Stockage
On sait maintenant comment les informations sont codées et transmises... se pose alors la
question du stockage (pour traiter des informations sur la durée et non uniquement dans l’im-
médiat). Dans les ordinateurs, il existe plusieurs types de mémoire, généralement classés en
deux catégories. La mémoire volatile (aussi appelée vive ou cache) s’efface quand la machine
s’éteint (cas de la RAM, random-access memory, par exemple), contrairement aux bandes ma-
gnétiques, disques durs ou mémoire de masse, comme le SSD, solid-state drive, ou la ROM,
read-only memory, qui sont ds mémoires persistantes. La mémoire vive est beaucoup plus coû-
teuse à produire, mais elle est également beaucoup, beaucoup plus rapide. Pour stocker les in-
formations temporairement, les systèmes logiques utilisent des bascules (flip-flops), qui sont
des systèmes logiques capables de maintenir la valeur d’un bit (et donc d’une information)
jusqu’à ce qu’une nouvelle donnée soit fournie. Un ensemble de bascules forme ce qu’on ap-
pelle les registres.
Concrètement ?
Le stockage des données informatiques s’effectue par des mécanismes différents, selon le sup-
port utilisé.
Les bandes magnétiques, support de stockage surtout utilisé pour l’archivage et les sau-
vegardes à long terme, sont constituées d’une fine couche d’oxyde de fer (matériau aux pro-
priétés magnétique) appliquée sur un ruban en plastique. Pour stocké une donnée, un cou-
rant électrique crée un champ magnétique qui aligne les particules d’oxyde de fer dans une
direction (représentant un 1) ou dans une autre (représentant un 0).
Les disques durs utilisent également des propriétés magnétiques pour stocker les données,
mais ils le font sur des disques rigides appelés plateaux. Ces plateaux tournent relativement
14 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
vite (de l’ordre de 6-7000 tours / minute), et des têtes de lecture / écriture montées sur des
bras mobiles se déplacent au-dessus des plateaux pour lire ou écrire des données.
La mémoire vive est constituée de millions de petites cellules logique 2 , chacune capable
de stocker un bit d’information. Rappelons que chaque cellule est composée d’un transistor
et d’un condensateur. Le condensateur peut, comme on la vu plus haut, être chargé (repré-
sentant un 1) ou déchargé (représentant un 0). L’unité centrale de calcul, ou processeur, peut
ainsi, grâce aux registres (illustration 1.8 ci-dessous), lire ou écrire directement dans n’im-
porte quelle cellule de mémoire, sans avoir à parcourir l’ensemble du contenu.
Illustrations
Mémoire persistante
(SSD, HDD, ROM)
Stockage
Traitement Échanges
Nous avons montré que les ordinateurs fonctionnent de manière relativement basique : ils
utilisent des portes logiques pour traiter des 0 et des 1. Il est difficile toutefois de se rendre
compte à quel point ces traitements sont rapides. Pour l’illustrer, imaginons que le processeur
écrive toutes ses opérations sur un ruban de papier.
Prenons l’exemple d’un processeur fonctionnant à une fréquence de 3 GHz, soit une opéra-
tion toutes les 3 nanosecondes. Supposons qu’une opération écrive 64 bits (ce qui correspond
à 8 caractères ou environ 5 cm de ruban). La vitesse de défilement du ruban serait alors de
150’000 km/s, soit à peu de chose près, la moitié de la vitesse de la lumière. Cela signifie que
2. Voir le chapitre précédent pour plus d’information
1.2. HARDWARE (LA MACHINE) 15
si un microprocesseur transcrivait toutes ses actions sur un ruban de papier, celui-ci devrait
se déplacer à la moitié de la vitesse de la lumière, soit environ quatre fois le tour de la Terre
par seconde !
Informatique quantique
Les ordinateurs quantiques se distinguent des ordinateurs classiques par l’utilisation de qu-
bits qui, contrairement aux systèmes binaires, peuvent être simultanément dans l’état 0 et
1. Cette propriété permet d’effectuer des calculs beaucoup plus rapidement. Comme un pro-
gramme classique qui doit tester chaque chemin d’un labyrinthe, un système quantique peut
explorer plusieurs chemins en même temps !
Le saviez-vous ? il serait plus approprié de parler de "processeur quantique" 3 car seule une
petite partie d’un calcul est réalisée par ce dernier, le reste étant toujours orchestré par un
processeur classique. Bien que de petits ordinateurs quantiques aient été construits depuis
les années 1990, les processeurs quantiques d’aujourd’hui en sont encore au stade expérimen-
tal, occupant des dispositifs encombrants de refroidissement et nécessitant des conditions
de vide poussé pour fonctionner (pression similaire à celle qui règne à la surface de la lune).
Le contrôle des qubits repose également sur des dispositifs sophistiqués, à des températures
proches de -273°C, le zéro absolu.
1.2.4 À retenir...
Points clés abordés
Questions récapitulatives
1. Pourquoi le système binaire est-il utilisé dans les ordinateurs et donnez un exemple de
ce type de codage.
2. Quelle est la différence entre la mémoire vive et la mémoire morte ? Donnez un exemple
de chaque.
3. Représentez à l’aide d’un schéma toutes les composantes d’un ordinateur.
4. Citez les différentes catégories de mémoire d’un ordinateur, et pourquoi la mémoire vive
est-elle généralement plus rapide que la mémoire morte ?
5. Donnez des exemples de périphériques d’entrée, de sortie et d’entrée-sortie.
3. À noter que des transistors expérimentaux ont été réalisés à l’échelle d’un seul atome (de carbone) : soit
environ 0,3 nanomètre.
Page vide
1.3. NETWORKS (RÉSEAUX) 17
1.3.1 Le web ?
Vous connaissez certainement le nom Web, mais où a-t-il été créé et comment fonctionne-t-il ?
Cette exemple, probablement connu par la plupart d’entre vous, illustre cependant bien les
notions clés liées aux réseaux.
Création du web
Le Web, ou World Wide Web (WWW), a été créé en 1989 par Tim Berners-Lee, un informati-
cien britannique. Il travaillait alors au CERN (Centre européenne pour la recherche nucléaire),
situé à Meyrin, près de Genève. Berners-Lee a inventé un système pour partager des infor-
mations entre chercheurs, en permettant la connexion et la navigation entre différents docu-
ments référencés par des liens hypertextes.
Fonctionnement
Les clients sont les appareils utilisés par vous et moi pour se connecter au web ; les logiciels
utilisés pour y accéder sont appelés des navigateurs web (voir p. 6 sur le sujet).
Les serveurs sont des ordinateurs qui hébergent des pages web, des sites ou des applications.
Lorsque nous voulons accéder à une page web depuis un appareil client, une copie de la page
est envoyée du serveur vers notre appareil, par le biais de réseaux informatique, contenu qui
s’affiche alors dans le navigateur utilisé.
18 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
Les routeurs, appareils de filtrage d’informations utilisés dans les réseaux informatiques, sont
la base de tout réseau : ils sont équipés de deux connecteurs. Une entrée qui reçoit et analyse
les informations reçues, qui, en fonction de la table de routage, décide s’il est nécessaire de les
retransmettre plus loin (sortie).
Power
Hub
Un hub est aussi un appareil relais. Il est équipé de plusieurs connecteurs, chaque informa-
tion reçue par un des connecteurs est retransmise sur tous les autres.
Switch
Un switch est, tout comme les hubs, équipé de plusieurs connecteurs d’entrée, mais chaque
information reçue par un des connecteurs est analysée et transmise sur le connecteur unique
(souvent en fibre optique) vers un seul destinataire qui renvoi les données demandées en re-
tour.
Firewall
Un firewall (ou pare-feu) est un système de sécurité qui filtre les communications entre un
réseau interne (ordinateur, entreprise) et l’extérieur (Internet). Son rôle est de bloquer les
connexions suspectes ou non autorisées, tout en laissant passer celles qui sont légitimes. Pour
1.3. NETWORKS (RÉSEAUX) 19
cela, il applique des règles définies à l’avance, par exemple en fonction d’une adresse IP, d’un
port ou d’un protocole utilisé. On distingue plusieurs formes de firewalls : les logiciels, instal-
lés directement sur un ordinateur ou un serveur (comme Windows Defender Firewall), et les
matériels, sous forme de boîtiers ou intégrés dans des routeurs. Dans les grandes entreprises,
les firewalls matériels peuvent analyser des millions de paquets par seconde et incluent des
fonctions avancées (détection d’intrusion, filtrage applicatif). À la maison, c’est souvent la box
Internet qui joue ce rôle, complété par le pare-feu logiciel intégré au système d’exploitation.
Un réseau client / serveur se caractérise par un ou plusieurs ordinateurs (PC clients) qui
se connectent à un ou plusieurs serveurs pour accéder à des ressources, des services, ou des
applications. Ces serveurs peuvent être, par exemple, des serveurs de fichiers, des serveurs
de messagerie ou, comme dans le cas 1.12, des serveurs web. La communication dans un ré-
seau client-serveur se fait la plupart du temps via des protocoles comme HTTP, FTP, ou TCP/IP,
mais pas que. Ce modèle d’organisation permet d’avoir une vision centralisée des ressources
et de son administration.
Une architecture Peer-to-peer (P2P) est, elle, décentralisée : chaque ordinateur, appelé
"pair" (ou "peer"), fonctionne à la fois comme client et serveur. Il n’y a donc pas d’architecture
préétabli : chaque pair peut demander et fournir des ressources directement aux autres pairs
du réseau. Les ressources, telles que les fichiers, la bande passante ou la puissance de calcul,
sont partagées entre les pairs, souvent via des protocoles spécifiques au P2P comme BitTor-
rent. Ce mode de fonctionnement a été grandement popularisé par des applications de com-
munication comme Skype ou WhatsApp, mais aussi par les blockchains qui sous-tendent le
fonctionnement de Bitcoin et autres cryptomonnaies. Bien qu’extrêmement pratique, ce type
de réseau peut soulever des questions en termes de sécurité, de gestion des ressources ou de
protection de la vie privée, car les données sont distribuées sur plusieurs machines qui ne sont
pas nécessairement contrôlées.
20 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
Les réseaux terrestres (par câbles) permettent une communication rapide entre les ordi-
nateurs, une utilisation rationnelle des données partagées et une stratégie plus facile à maî-
triser dans le domaine de la sécurité (contrôle et sauvegarde des données). Cependant, un tel
type de réseau a pour inconvénient sa complexité (nécessitant souvent le recours à un person-
nel spécialisé en cas de problème). La configuration en étoile est la situation la plus souvent
rencontrée en entreprise. Selon la taille du réseau, on parlera de PAN (Personal Area Net-
work), LAN (Local Area Network) ou, à l’échelle d’une région, d’un pays ou d’un continent, de
WAN (Wide Area Network).
Les réseaux sans fil (ou wireless network) permettent, de leurs côtés, à des appareils de com-
muniquer entre eux sans utiliser de câbles, grâce à des ondes radio ou infrarouges. Les uti-
lisateurs peuvent donc rester connectés tout en se déplaçant (dans une zone donnée relati-
vement reteinte). De la même façon que pour les réseaux terrestre, selon la taille du réseau
sans fil, on parlera de WPAN (Wireless Personal Area Network pour les connexions type Blue-
tooth ou infrarouge), WLAN (Wireless Local Area Network pour le WiFi par exemple) ou, à
l’échelle d’une région ou d’un pays, de WWAN (Wireless Wide Area Network de le cas par exemple
de réseaux téléphoniques).
Le saviez-vous ? Les ondes électromagnétiques sont constituées de deux champs : électrique
et magnétique. La qualité du signal diminue inévitablement à mesure que l’on s’éloigne de la
source, en raison des perturbations environnantes. Plus la fréquence est élevée, plus le signal
est sensible aux perturbations, mais en contrepartie, la transmission des données est plus ra-
pide. Débit qui dépend aussi de la modulation de l’onde, laquelle est déterminée par la fré-
quence et le type de modulateur utilisé.
Un protocole est un ensemble de règles mises en place pour le bon fonctionnement d’un pro-
cessus.
TCP/IP
Concrètement, lorsque vous saisissez une adresse (URL) dans votre navigateur, ce dernier de-
mande au serveur DNS situé chez l’hébergeur du site, l’adresse IP réelle du site web. Il en-
1.3. NETWORKS (RÉSEAUX) 21
P1 P2 P3 P4
Internet
ROUTEUR
P1 P2 P3 P4
FIREWALL
WIFI
P1 P2 P3 P4 P5 P6 P7 Fibre
SWITCH
PC
P1 P2 P3 P4 P5 P6 P7 Fibre
Fichiers
PC
Backup
Web
PC
SERVEURS
voie une requête HTTP pour obtenir une copie du site, un peu comme si vous passiez une com-
mande dans un restaurant. Cette communication se fait via une connexion internet en utili-
sant le protocole de cryptage TCP/IP. Le navigateur assemble ensuite les différents paquets
reçus et affiche ainsi le site sur votre écran.
Adresses privées Chaque machine connectée à un réseau est associée une adresse IP unique,
permettant de communiquer avec les autres machines. Cette adresse IP est fixée par l’admi-
nistrateur du réseau ou attribuée automatiquement au démarrage grâce au protocole DHCP
(Dynamic Host Configuration Protocol). Une adresse IP standard (IPv4) est formée de 4 octets
(32 bits), compris entre 0 et 255, séparés par des points. Souvent l’administrateur d’un réseau
donnera un intervalle pour les adresses locales (de [Link] à [Link]). L’adresse
est également associée à un masque qui fournit le nombre de bits de l’adresse, sur une réseau
local, le masque sera souvent [Link].
22 CHAPITRE 1. LES SYSTÈMES INFORMATIQUES
Ouverture des réseaux privés sur Internet Lorsqu’un réseau local est relié à Internet,
l’ordinateur avec la connexion Internet sert de relais pour les autres ordinateurs du réseau
local. Cet ordinateur possédera ainsi deux adresses IP : une pour le réseau local et une pour
la connexion Internet.
Ce mode de connexion est souvent utilisé via une session terminal lancée par
ssh nomutilisateur@[Link]. À noter que, contrairement au VPN qui gère la connexion
au niveau des réseaux, la connexion SSH intervient au niveau des applications, rendant donc
son utilisation beaucoup plus spécifique 4 .
Erreurs HTTP
Pour mémoire, les erreurs HTTP sont des messages que les serveurs renvoient aux naviga-
teurs pour indiquer des problèmes lorsqu’ils traitent les requêtes des utilisateurs. Parmi les
erreurs les plus fréquentes, on retrouve les codes 403 et 404.
L’erreur 403 indique que l’accès à la ressource demandée est interdit. Cela se produit généra-
lement lorsque le serveur comprend la requête, mais refuse de l’exécuter en raison de permis-
sions insuffisantes.
L’erreur 404 se produit lorsque le serveur ne trouve pas la ressource demandée. Cela signifie
que le fichier ou la page a été déplacé, supprimé ou que l’URL saisie est incorrecte.
Une attaque DoS vise à rendre un service ou un serveur indisponible. Le principe est le sui-
vant : de nombreux appareils compromis (appelés botnets) envoient un grand nombre de re-
4. SSH sert, en effet, à sécuriser une connexion précise, par exemple pour gérer un serveur ou transférer des
fichiers (SFTP). Un VPN, lui, crée un tunnel chiffré qui protège tout le trafic réseau de l’ordinateur (web, mails,
applis, etc.)
1.3. NETWORKS (RÉSEAUX) 23
quêtes vers un serveur cible, le surchargeant jusqu’à ce qu’il ne puisse plus répondre aux re-
quêtes légitimes. Divers mesures permettent, au niveau d’une entreprise de mieux se proté-
ger : l’utilisation de pare-feux et listes noires d’adresses IP reconnues comme corrompues ou
la mise en place d’un répartisseur de charge du trafique (Content Delivery Networks).
Le saviez-vous ? En 2016, une attaque massive a frappé le fournisseur de DNS Dyn, ren-
dant inaccessibles de nombreux sites comme Twitter (maintenant appelé X), Netflix et Red-
dit. L’attaque a utilisé des millions d’appareils IoT (Internet of Things ou, en français, Inter-
net des objets) compromis pour lancer cette attaque de manière coordonnée.
1.3.7 À retenir...
Points clés abordés
Questions récapitulatives
NOTIONS D’ALGORITHMIQUE
Ce qui distingue un algorithme d’une autre méthode de résolution de problèmes, c’est le ca-
ractère systématique de son exécution. En d’autres termes, un algorithme ne doit demander
aucune initiative à celui ou celle qui l’exécute. Ceci explique l’importance de l’algorithmique
en informatique : un ordinateur n’étant capable d’aucune initiative, il ne peut exécuter une
tâche que si on lui fournit strictement un algorithme pour le faire. Tout programme informa-
tique a donc, par définition, la structure d’un algorithme.
Dans cette partie du cours nous n’aborderons pas les spécificités d’un langage en particulier,
les notions présentées restent ainsi valables dans la majorité des cas pour
25
26 CHAPITRE 2. NOTIONS D’ALGORITHMIQUE
Imaginons que vous avez un problème compliqué et que vous voulez utiliser un ordinateur
pour le résoudre. Pour y arriver, nous vous proposons de le décomposer en six étapes :
Étapes de base
1. Comprendre le problème Parfois, on commence avec une idée un peu floue de ce qu’on
veut faire. On doit transformer cette idée en quelque chose de très clair et précis pour vous
afin que l’ordinateur puisse l’interpréter correctement.
2. Rédiger les "spécifications" Les spécifications (ou "spéc.") sont des représentations plus
ou moins détaillées qui expliquent ce que doit faire le programme, sans toutefois dire com-
ment le faire. On y décrit les informations que le programme va recevoir, ce qu’il doit faire
avec, et ce qu’il doit donner à la fin (voir modélisation page suivante).
Développements
3. Créer votre algorithme Après avoir une spécification claire, on va crée un algorithme.
On commence par diviser le gros problème en plusieurs petits problèmes plus simples, et trou-
ver des solutions à notre portée.
4. Vérifier l’algorithme L’algorithme doit etre testé pour que l’on soit sûr qu’il fonctionne
correctement. On vérifie qu’il donne les bonnes réponses à différentes questions, qu’il ne com-
met pas d’erreurs et qu’il ne tourne donc pas en rond sans fin.
Contrôles et exécution
Enfin, sixième étape, le programme que vous avez écrit est transformé en "exécutable" (pour
réaliser ce qui est demandé) que vous devrez bien souvent encore le tester (ou faire tester) !
2.2.2 Modélisation
En algorithmique, quand on parle de "problème" ou de "modélisation", c’est simplement une
question ou une tâche que l’on doit effectuer ou qu’on veut résoudre de manière organisée et
efficace. Cependant...
— Alice a dix bonbons et en donne deux à Bob... Combien en reste-t-il pour Alice ?
— Trouver le trajet le plus court pour aller, à 17h, de l’école à chez moi
... ne sont, en soit, pas vraiment utiles (sur le moyen ou long terme) parce qu’ils ont une ré-
ponse unique à une question spécifique. Ce qui est plus intéressant, c’est de trouver des solu-
tions utilisables à plusieurs reprises, et qui fonctionnent, encore mieux, pour plein de situa-
tions différentes, comme par exemple :
— Trouver le trajet le plus court entre deux endroits, peut importe l’heure choisie
Pour trouver la meilleure solution (ou, pour le moins, une solution acceptable), il faut d’abord
modéliser le problème. Pour cela, on procède, généralement, de la manière suivante :
2. Définition des contraintes Règles (appelée souvent pré-contraintes) que les paramètres
doivent respecter, par exemple on ne peut pas avoir un nombre négatif de bonbons
4. Clarification les post-conditions Règles que la réponse finale doit respecter pour être
validée, par exemple le résultat doit être un entier positif (pas un nombre réel)
Contraintes Post-conditions
Nombre entier positif Nombre entier ≥ 0
En algorithmique, "affecter" une valeur à une ou des variables signifie enregistrer cette va-
leur dans une "boîte" que l’on a étiquetée avec un nom spécifique. Exemple :
a <-- 5
La boucle tant que ou while (en anglais) nous permet de répéter des instructions tant qu’une
certaine condition est vraie. Exemple :
Si / If
La structure si ou if (en anglais) nous permet de prendre des décisions dans notre algorithme.
Exemple :
Appliquons ce que nous avons appris à un problème concret. Imaginons que vous deviez mul-
tiplier deux nombres, mais qu’au lieu d’utiliser la manière classique de procéder, vous devez
innover en appliquant la multiplication russe. Voici les principes qui vous sont imposés :
A Diviser et Doubler
— Prenez le premier nombre (multiplicateur) et divisez-le par deux à chaque étape, en
ne retenant que la partie entière du résultat (quotient). Continuez jusqu’à obtenir 1.
— En parallèle, prenez le deuxième nombre (multiplicande) et doublez-le à chaque étape.
B Sélectionner et Additionner
— À chaque ligne (ou étape), si le nombre de gauche (multiplicateur divisé) est impair,
alors conservez le nombre de droite (multiplicande doublé).
— Additionnez tous les nombres ainsi retenus : la somme obtenue correspond au pro-
duit recherché !
Démarche
1. Analyser et décompoer le problème à l’aide des six étapes clés vues auparavant, soit ici,
utiliser une méthode alternative pour effectuer la multiplication entre deux grandeurs
donnée
2. Rédiger des spéc.
Illustrons cette méthode avec 12 x 25. On pose les deux chiffres de part et d’autre d’un trait :
12 25
6 50
3 100
1 200
0 400
Deux possibilités, soit, on barre les lignes ayant un reste nul et additionne les nombres de la
colonne de droite, divisé par deux, soit on additionne les nombres correspondant aux valeurs
impairs.
Méthode A Méthode B
pair — / 6 – 50 ————— r 0 / entier 6 – 50 —————
impair / 3 100 -> Σ = 100 r 0 / entier 3 100 ————–
impair / 1 200 -> Σ = 300 r + / entier 1 200 -> Σ = 200
pair — / 0 400 -> Σ = 300 r + / entier 0 400 -> Σ = 600
Le résultat de la multiplication trouvé est donc de 300 1 . À noter que la séquence des restes
(méthode B), du bas vers le haut, donne le code binaire du chiffre décimal (ici 12 s’écrit 1100).
L’on se réferrera aux annexes, pour une résolution à l’aide d’un tableur.
Le résultat est acceptable, je peux le confirmer par exemple en effectuant le calcul de manière
classique (10 x 25 + 2 x 25 = 250 + 50). La méthode, en fait, fonctionne, et cela nous permet de
comprendre le raisonnement, car elle décompose (divise) le premier nombre par des multiples
de 2 et impose, dans le même temps, de multiplir le deuxième nombre par le même chiffre (12
x 25 = 6 x 50 = 3 x 100 = 1 x 300). C’est une technique très ancienne, plutôt intelligente et qui
montre qu’il y a plusieurs façons de résoudre un même problème !
... on décrira le fonctionnement (processus) d’un agorithme de manière rigoureuse, ce qui, tout
comme la compréhension même du problème, n’est pas toujours facile !
1. (100 + 200) avec la méthode A ou (200 + 400) / 2 avec la B... ce qui revient du point de vu du résultat, fina-
lement, au même ;)
2.2. DÉMARCHE POUR LA RÉSOLUTION D’UN PROBLÈME 31
Dans le cas du processus de multiplication russe, à chaque itération, si a est impair, on ajoute
la valeur de b à r et quelle que soit la situation, on divise a par deux (division entière) et on
double b. Le processus se répète tant que a est différent de zéro.
Début
non oui
a égal à 0 ? a impair ? Ajouter b à r et enlever 1 à a
non
Affiche r à l’écran
Fin
Représentation linéaire
Le même algorithme peut être écrit sous forme linéaire, en langage séquenciel (pseudo-code).
1 début
2 r←0
3 tant que a est différent de 0 faire
4 si a est impair alors
5 r ← r+b
6 a ← a−1
7 fin
8 a ← a/2
9 b ← bx2
10 fin
11 affiche r à l’écran
12 fin
32 CHAPITRE 2. NOTIONS D’ALGORITHMIQUE
Avant de plonger tête la première, on doit réfléchir et planifier comment on va chercher. Voici
ce qu’on doit définir :
Entrées : une pile de dossiers P , un nom X
Sorties : une réponse R , oui ou non, pour dire si le dossier X est dans la pile
Pré-contraintes : les dossiers P sont rangés par ordre alphabétique
Post-conditions : notre réponse doit être adéquate (M. X et non pas Mme Y ) en
d’autres termes,
si P contient un dossier au nom de X alors R doit être égal à oui
sinon R doit être égal à non
Maintenant, on peut commencer à chercher. Une première idée, c’est de prendre chaque dos-
sier depuis le haut de la pile, un par un, et de voir si c’est celui de M. X. Si on trouve un dos-
sier avec un nom après M. X dans l’alphabet, on peut arrêter parce qu’on saura que le dossier
de M. X n’est pas là. Soit de manière plus séquentielle :
1 début
2 tant que pile de dossiers P n’est pas vide et nom du dossier au sommet de P est
inférieur à X faire
3 Prendre le dossier au sommet de P
4 Le poser à coté de P
5 fin
6 si P est vide ou le nom du dossier au sommet de P est différent de X alors
7 R ← non
8 sinon
9 R ← oui
10 fin
11 fin
Dans cet algorithme, nous supposons que la personne est capable d’effectuer les opérations
suivantes :
— Comparer (selon l’ordre alphabétique) le nom du dossier au sommet de la pile avec X
— Prendre le dossier au sommet de la pile
— Poser un dossier à côté de la pile
2.2. DÉMARCHE POUR LA RÉSOLUTION D’UN PROBLÈME 33
On observera en outre que cet algorithme introduit trois types d’enchaînement différents ; des
enchaînements :
1. Séquenciel : qui consiste à effectuer les opérations les unes à la suite des autres ; par
exemple, les lignes 6 et 7 s’enchaînent de manière séquenciel et, par conséquent, l’opé-
ration élémentaire de la ligne 6 n’est commencée qu’une fois que celle de la ligne 5 est
terminée !
2. Alternatif : qui consiste à effectuer soit une première suite d’opérations, soit une autre,
en fonction d’une condition ; par exemple, en fonction de la condition de la ligne 9, on ef-
fectuera alternativement l’opération élémentaire de la ligne 11, ou celle de la ligne 13...
3. Répétitif : qui consiste à effectuer plusieurs fois une même suite d’opérations tant qu’une
condition donnée est vérifiée ; par exemple, les opérations des lignes 6 et 7 sont répétées
tant que les deux conditions des lignes 3 et 4 sont vérifiées ;)
On remarquera que cet algorithme termine, c’est-à-dire qu’il s’exécute en un temps fini. En
effet, si la pile contient n dossiers, les opérations des lignes 4 et 5 seront exécutées au plus
n fois : à chaque fois, un dossier est enlevé de la pile ; au bout de n fois, la pile est vide et la
condition de la ligne 2 et 3 n’est plus vérifiée.
N’y a-t-il pas une autre (meilleure) méthode ? On pourrait par exemple couper la pile en deux,
regarder le nom sur le dossier au milieu, et décider de continuer à chercher dans la moitié su-
périeure ou inférieure en fonction du nom obtenu. On continue à couper la pile en deux jus-
qu’à trouver le dossier de M. X ou jusqu’à ce qu’il n’y ait plus de dossiers.
34 CHAPITRE 2. NOTIONS D’ALGORITHMIQUE
Ce deuxième algorithme est plus complexe à comprendre (et à mettre en oeuvre) que le pre-
mier, mais il est beaucoup plus efficace. Pour 1000 dossiers : on va diviser la pile en deux par-
ties égales, soit deux piles de 500. Ensuite, on prend une de ces piles et on la divise encore en
deux. On continue comme cela jusqu’à ce qu’on trouve le dossier recherché ou que la pile soit
vide... ce qui réduit à rechercher au maximum 10 dossiers en tout pour trouver celui qu’on
cherche ou pour réaliser qu’il n’est pas là. C’est beaucoup moins que les 500 dossiers qu’on
aurait dû consulter en moyenne avec la première méthode de recherche séquentielle !
2.3. QUELQUES BONNES PRATIQUES DE PROGRAMMATION 35
Il est donc très important de respecter certaines bonnes pratiques de programmation (qui s’ap-
pliquent à la rédaction d’algorithmes) pour rendre le plus agréable possible la lecture de code.
Ce partie n’a pas vocation à vous enseigner toutes les bonnes pratiques de programmation...
il y’a cependant quelques bonnes habitudes que vous devez prendre dès le début.
Par conséquent, lorsqu’on lit un contrat, i.e. que l’on consulte l’interface prévue, on est rensei-
gné sur ce à quoi on peut s’attendre, ainsi que sur les limites de l’algorithme que l’on va utili-
ser, sans pour autant avoir besoin de comprendre comment l’algorithme fonctionne ou est im-
plémenté. Par exemple, quand vous utilisez print("Hello world !") en Python, vous savez que
vous allez obtenir, mais vous ne savez pas comment Python procède réellement pour afficher
le message.
3. Explicite
Facile à lire
Pour que le code soit facile à lire, il faut d’une part qu’il soit bien structuré et bien présenté,
et d’autre part, que les noms des variables et des fonctions soient choisis avec soin.
Pour ce qui est de la structure et de la présentation, Python nous aide beaucoup car le lan-
gage impose beaucoup de choses qui nous "forcent" à bien présenter notre code. Par exemple,
les blocs d’instructions du même niveau doivent être précédés du même nombre d’espaces, ce
qui nous conduit naturellement à bien indenter notre code.
36 CHAPITRE 2. NOTIONS D’ALGORITHMIQUE
Dans d’autres langages, plus de libertés de présentation sont offertes au développeur, par consé-
quent, il convient de se forcer à respecter des conventions pour écrire le code le plus propre
possible. Par exemple, regardez le code ci-dessous. Il est évident que le manque d’indentation
ne facilite pas la lecture et la compréhension du code, n’est-ce pas ?
>>>>
int i, j; int n = 10; int p[n][1]; int k = 0, m = 0, o = 0; #1
p[i][0] = i; m = i; printf("----"); #3
return; #5
Ce point est délicat car nous avons souvent des solutions différentes pour résoudre le même
problème. Il est donc normal qu’un code logique pour quelqu’un semble "tordu" à son voisin.
Étant conscient de cela, il faut vous efforcer de trouver des solutions logiques aux problèmes
que vous devez résoudre et d’éviter d’emprunter des chemins plus compliqués qui ne feraient
que semer la confusion. Par exemple, si l’on vous demande d’afficher tous les nombres de 1
à 10, il suffit de faire une boucle qui fait évoluer un compteur entre 1 et 10 et qui affiche, à
chaque tour, la valeur de ce compteur. La solution qui consisterait à faire une boucle qui fait
évoluer un compteur de 9 à 0 fonctionne aussi, mais est moins "élégante".
Code explicite
Lorsque l’on écrit des algorithmes ou que l’on développe des programmes, on est parfois tenté
de prendre des raccourcis car "on sait" que telle méthode permet de faire telle ou telle chose...
Il n’est pas interdit de prendre ces raccourcis, mais il faut toujours prendre le soin d’expli-
quer, au moins à travers des commentaires, pourquoi on fait cela. C’est important à la fois
pour permettre aux autres de comprendre pourquoi votre solution est astucieuse... mais aussi
pour vous, au cas où vous ne vous souveniez plus de "pourquoi vous avez fait ça".
"Clean" et robuste
Lorsque l’on écrit du code, on a la fâcheuse tendance à s’arrêter dès que celui-ci fonctionne.
C’est un tort ! Le code doit être entretenu. Cela signifie qu’il faut relire son code après l’avoir
terminé, vérifié que l’on a bien supprimé les éléments obsolètes, vérifier que les commentaires
sont à jour et cohérents avec le code conservé, etc.
Cette opération de "maintenance" du code est cruciale, mais elle est pourtant souvent négli-
gée par beaucoup, ce qui peut poser des problèmes, notamment lorsque vous rencontrez un
bug.
Chapitre 3
3.1 Généralités
Nous apprendrons ici, en et avec Python, les bases de la programmation. On va utiliser pas
mal d’exemples et on suppose que vous savez déjà un peu programmer (notamment au cycle
d’orientation).
Pourquoi Python 3 ?
Nous utilisons Python 3 parce qu’il est moderne et très utilisé.
Python a été créé en 1991 par Guido van Rossum. Depuis, il a beaucoup évolué et en 2023, on
utilise la version 3.12. Python est connu pour être un langage de programmation qui a beau-
coup de fonctions et est facile à apprendre.
— Rapide et interactif
Python est utilisé par beaucoup d’écoles et d’universités pour enseigner la programmation. Il
est aussi utilisé par les scientifiques comme alternative à MATLAB, surtout pour les calculs
et l’analyse de données.
37
38 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
Si vous voulez exécuter ce script directement depuis un shell, cette première ligne est néces-
saire. Sinon, vous pouvez également lancer le script en utilisant un des logiciels disponible
(interface utilisateur graphique d’un environnement de développement intégré IDE / GUI)
sur les ordinateurs : InformaticLi, Thonny ou TigerJython [Arnold et al., 2022]. Pour plus d’in-
formations sur la rédaction de scripts, voir le chapitre correspondant, p. 57.
Une ligne de code ne devrait pas être trop longue (environ 80 caractères). Si vous avez besoin
de plus de place, vous pouvez continuer sur la ligne suivante avec un back-slash (\). Mais si
vous utilisez des parenthèses, des crochets, ou des accolades, ou si vous écrivez des textes longs
(avec ’ ’ ’ ou " " "), vous pouvez écrire sur plusieurs lignes sans le back-slash.
Commentaires
Les commentaires sont des parties de votre code qui ne sont pas exécutées. Ils sont utiles pour
expliquer ce que fait votre code.
Les noms des variables en Python doivent commencer par une lettre minuscule ou un souli-
gné, suivi de lettres, chiffres ou soulignés. Attention, Python fait la différence entre majus-
cules et minuscules ! Pour plus de détails, on se référera au chapitre suivant sur les conven-
tions pour nommer fonctions, variable ou fichiers. À noter qu’il y a des mots spéciaux appelés
"mots-clés réservés" que vous ne devez pas utiliser comme noms de variables. Notamment...
>>>>
False, None, True, and, as, assert, break, class, #1
with, yield #5
Comprendre le typage
# Nombre decimaaux
c = -3.3
abs(c) # => 3.3
# Arrondi et conversion
int(3.67) # => 3 (int)
round(3.67) # => 4 [equivalent: round(3.67, 0) ou int(3.67)]
round(3.67,1) # => 3.7 (float)
round(133,-1) # => 130 (int)
round(133,-2) # => 100 (int)
# Nombres complexes
d = 3.4 + 2.1j
[Link] # => 3.4
[Link] # => 2.1
Assignation simple
On vient de voir plus haut que l’assignation de variables s’effectue classiquement avec =. Pour
enlever une variable ou un objet de la mémoire, on utilisera del.
x = 3 # x prend la valeur 3
del x # x n’existe plus
Assignation multiple
Python permet de faire aussi de l’assignation multiple, c’est-à-dire : donner la même valeur
à plusieurs variables en même temps ou assigner plusieurs valeurs en même temps à diffé-
rentes variables
Tout ce que l’utilisateur tape est considéré comme du texte. Si vous avez besoin d’un nombre,
vous devez convertir ce texte en nombre (avec int pour les entiers ou float pour les nombres
à décimales).
3 + 2 # Addition => 5
10 / 3 # Division => 3.3333... (avec decimales)
10 // 3 # Entier => 3 (sans decimales)
2 * 3 # Multiplication => 6
5 ** 2 # Puissance => 25 (5 au carre)
5 % 2 # Reste => 1 (reste de la division de 5 / 2)
"oh" + 2*"la" # => ohlala
(1,2) + 2*(4,) # => (1, 2, 4, 4)
# Incrementation / Decrementation
val = 10
val += 1 # val=val+1 => 11
val -= 1 # val=val-1 => 10
val *= 2.5 # val=val*2.5 => 25.0
val /= 10 # val=val/10 => 2.5
val %= 2 # val=val%2 => 0.5
fruit = "pomme"
fruit += "s" # => pommes
Opérateurs de comparaison
Pour comparer des choses, on utilise :
Opérateurs logiques
3.1.4 Nomenclature
Vous trouverez ci-dessous les recommandations données par le guide de style PEP 8 et les
conventions pour documents PEP 257 1 , toutes deux adaptées du guide de style écrit par Guido
van Rossum 2 . Se référerer aux différents chapitres pour les définitions de certains termes.
L’objectif est ici, simplement, de normaliser le nom des choses, indiquant notamment ce qu’elles
contiennent. Ces recommandations sont juste des conventions, pas des lois ou de la syntaxe
gramaticale.
À notre que certains logiciels utilisent ces conventions, et les respecter vous permettra d’obte-
nir simplement de meilleurs résultats ;)
Style Utilisation
Remarques :
1. Lorsque on utilise des acronymes, on mettra toutes les lettres de l’acronyme en majus-
cule. Ainsi, HTTPServerError est préférable à HttpServerError
2. Existe aussi, dans certains langage, la convention d’utiliser un court préfixe unique pour
regrouper des noms liés ; cette technique n’est pas beaucoup utilisé en Python...
3. Les formes spéciales utilisant des tirets bas au début ou à la fin d’un nom sont recon-
nues
o _tiret_bas_initial indique une utilisation interne faible (par exemple, l’instruction
from M import * n’importera pas les objets dont les noms commencent par un tiret
bas)
o tiret_bas_final_ est surtout utilisé pour éviter les conflits avec les mots-clés Python
(par exemple class_="ClassName")
o __double_tiret_bas_initial est utilisé pour nommé un attribut dans une classe (à l’in-
térieur de la classe ClassName, __boo devient _ClassName__boo).
o __double_tiret_bas_initial_et_final__ sont des objets ou attributs "magiques" qui ont
des raisons d’être particulière (notamment, __init__, __import__, __file__ ou __main__)...
ne les utiliser que de manière convenue
Noms à éviter
N’utilisez jamais les caractères "l" (lettre minuscule el), "O" (lettre majuscule oh) ou "I" (lettre
majuscule hi) comme noms de variables à caractère unique.
Les modules doivent avoir des noms courts, entièrement en minuscules. Des tirets bas peuvent
être utilisés dans le nom du module seulement si cela améliore la lisibilité.
S’agissant des noms des fonctions, il est de coutume, de le faire débuter par un caractère
minuscule. S’il est composé de plusieurs mots, on concatène ceux-ci et les faisant débuter cha-
cun par une majuscule (exemple fctBienNommee). On séparera cependant les mots par des
traits de soulignement pour éventuellement améliorer la lisibilité.
La dénomination des variables répond aux mêmes règles que les fonctions. À noter cepen-
dant que les noms sont sensibles aux majuscules / minuscules (PRINT ou Print retournant
ainsi une erreur de type "not defined").
46 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
3.2 Containers
Les containers (ou types containers) en Python sont des types de données qui peuvent conte-
nir plusieurs éléments. Contrairement aux types simples comme les booléens, entiers, ou nombres
flottants, les containers peuvent stocker plusieurs valeurs.
On distingue fondamentalement trois catégories de containers, implémentés sous forme de 6
types de base (built-in) Python...
# Concatenation
meta = "L’" + meta1 + " et " + meta2 # => "L’argent et l’or"
type(meta) # => [Link]
# Adressage
len(meta) # => 16
meta[:8] # idem que meta[0:8] => "L’argent"
meta[12:] # idem que meta[12:len(meta)] => "l’or"
# Modification
meta = meta[:9] + ’sale’ # => "L’argent sale"
# Chaine multi-ligne
chaine_multi = ’’’Ceci est
une chaine
sur plusieurs lignes’’’
print(*range(1, 10, 2)) # => 1, 3, 5, 7, 9... soit 1 > 10, par pas de 2
enumerate
La fonctoin enumerate() est utilisée pour obtenir à la fois l’indice et la valeur des éléments
d’une séquence (liste ou chaîne de caractères).
print(*enumerate(["a", "b", "c"], 1)) # => (1, "a"), (2, "b"), (3, "c")
Une liste en Python est un type de donnée qui peut contenir plusieurs éléments, même de
types différents (comme des nombres, du texte, ou même d’autres listes).
Pour créer une liste, on utilise des crochets [] avec des éléments séparés par des virgules.
Pour ajouter des éléments, on peut utiliser append() ou insert(). Pour les supprimer, on
utilise del ou pop().
Pour parcourir tous les éléments d’une liste, on utilise souvent une boucle for.
for i in ma_liste:
print(i)
Si l’on souhaite dupliquer les données d’une liste listeA=[...], il est très important de comprendre
qu’avec Python une simple assignation listeB=listeA n’effectue pas de copie des données : les
deux variables listeA et listeB référenceront en effet la même liste ! Pour réellement recopier
les données d’une liste, il faut donc prendre des précautions particulières : utiliser une copie
complète récursive (agissant dans toute la profondeur de la liste).
listeA = [1, 2, 3]
listeB = listeA # listeB pointe vers listeA, verifiable avec print(...)
import copy
listeA = [1, 2, 3]
listeB = [Link](listeB)
listeB[1] = "a" # on agit dans ce cas, sur le nouvel objet
print(listeB) # => [1, ’a’, 3]
print(listeA) # => [1, 2 , 3] :: donnees d’origine intouchees !
3.2.4 Dictionnaires
Un dictionnaire est une collection d’éléments où chaque élément (ou occurence) est une paire
clé : valeur. Les clés doivent être uniques et immuables (nombres ou chaînes), mais les va-
leurs peuvent être de n’importe quel type.
3.3 Contrôles
Notez encore qu’un bloc de code (ceci est notamment valable pour les fonctions, les structures
if, for, while...) doit contenir au minimum une instruction. S’il n’en a pas, on peut utiliser
l’instruction pass qui n’effectue aucune action.
On utilisera les conditions if, elif et else pour exécuter du code en fonction de conditions.
Expressions conditionnelles
Fonctions logiques
— all() renvoie True si tous les éléments d’une séquence sont vrais.
Note : en Python, une valeur non nulle ou une séquence non vide est considérée comme vraie !
3.3. CONTRÔLES 51
3.3.3 Boucles
Les boucles for et while peuvent inclure une clause else qui s’exécute après la fin de la
boucle, sauf si la boucle est terminée par un break. Mais voyons cela de plus près..
La boucle for est utilisée pour répéter des instructions pour chaque élément d’une liste, d’un
tuple, ou de tout objet itérable. Utilisez range() avec for pour itérer sur une séquence de
nombres.
# Utiliser range avec for
for i in range(1, 4):
print(i) # Affiche 1, 2, 3
# Sur chaines
voyelles = "aeiouy"
for car in "chaine de caracteres":
if car not in voyelles:
print(car, end="")
# => affiche les consonnes: chn d crctrs
# Sur dictionnaires
carres = {}
for n in range(1,4):
carres[n] = n**2 # => {1: 1, 2: 4, 3: 9}
La boucle while continue d’exécuter des instructions tant qu’une condition est vraie.
# Exemple de boucle while
i = 1
while i < 4:
52 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
print(i)
i += 1 # Important d’incrementer i
# Comprehension de set
impairs = {x for x in range(1, 10) if x % 2 != 0}
# Comprehension de dictionnaire
carres_dict = {x: x*x for x in range(1, 5)}
54 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
De façon générale, on implémente des fonctions lorsqu’un ensemble d’instructions est suscep-
tible d’être utilisé plusieurs fois dans un programme. Cette décomposition en petites unités
conduit à du code plus compact, plus lisible et plus efficace.
# Utilisation de la fonction
resultat = nomFonction(3, 4) # Donne 7
3.4.2 Modules
Utilisation
Un module Python (parfois appelé bibliothèque ou librairie) est un fichier rassemblant des
classes et fonctions relatives à un certain domaine. On implémente un module lorsque ces ob-
jets sont susceptibles d’être utilisés par plusieurs programmes.
Pour avoir accès aux fonctions d’un module existant, il faut charger le module avec la com-
mande import, ce qui peut se faire de différentes manières, avec :
A from module import *, on obtient l’accès direct à l’ensemble des fonctions du mo-
dule indiqué sans devoir les préfixer par le nom du module
B from module import fct1, fct2, ..., on ne souhaite l’accès qu’aux fonctions
fct1, fct2 spécifiées
3.4. FONCTIONS, MODULES ET SCRIPTS 55
C import module1, module2, ..., toutes les fonctions des modules spécifiés seront
accessibles, mais seulement en les préfixant du nom du module
D import module as nomLocal, toutes les fonctions du module sont accessible en les
préfixant du nomLocal que l’on a défini
Les méthodes (C) et (D) sont préconisées. La technique (A) ne devrait en principe pas être uti-
lisée, car elle présente le risque d’écrasement d’objets si les différents modules chargés et/ou
votre programme implémentent des objets de noms identiques. Elle rend en outre le code moins
lisible (on ne voit pas d’où proviennent les fonctions utilisées).
# Admettons qu’on doive utiliser la constante ’pi’ et la
# fonction ’sin’, tous deux definis dans le module ’math’
# A -------------------------------------------------------------
from math import *
%who # => on voit toutes fcts importees !
sin(pi/2) # => 1.0
# B -------------------------------------------------------------
from math import pi, sin
%who # %whos => seules ’pi’, ’sin’ accessibles
dir() # => objets dans namespace, notamment ces fcts
sin(pi/2) # => 1.0
cos(pi) # => erreur "name ’cos’ is not defined"
# C -------------------------------------------------------------
import math
%who # => module ’math’ importe
math.<tab> # => liste les fonctions du module
help(math) # => affiche l’aide sur ces fonctions
[Link]([Link]/2) # => 1.0
cos(pi) # => erreur (non prefixes par module)
# D -------------------------------------------------------------
import math as mt
%who # => module math importe s/nom mt
mt.<tab> # => liste les fonctions du module
[Link]([Link]/2) # => 1.0
[Link]([Link]/2) # => erreur "name math not defined"
[Link]([Link]) # => -1.0
56 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
Écriture de modules
Créer un module revient simplement a créer un fichier nommé [Link] dans lequel seront
définies les différents objets (fonctions, classes. . .) du module. Le nom du module est en géné-
ral défini en caractères minuscules seulement (a-z, avec éventuellement des _). Vous pouvez
ensuite l’importer dans d’autres scripts.
# Contenu du fichier mon_module.py
def maFonction():
return "Hello, World!"
def carre(nb):
return nb*nb
def cube(nb):
return nb*nb*nb
if ___name___ == "___main___":
# module execute en tant que script
print("Exemple de la fonction carre()")
print(" carre(4) => ", carre(4))
# Utilisation du module
import mon_module
mon_module.cube(2) # => 8
3.4.3 Scripts
Un script (ou programme) est un fichier de code que l’on peut exécuter dans un interpréteur.
En Python, son nom se termine en principe par l’extension .py.
On a déjà dit quelques mots sur (A) les deux lignes d’en-têtes d’un script (définition de l’in-
terpréteur, encodage des caractères). Cette ligne, bien qu’utile dans la pratique, est, en re-
vanche et pour des questions de lisibilité du code, optionels pour ce cours ( !). Pour divers rai-
sons, liées notamment à l’identification du code par l’enseignants, on mentionnera en revanche
systématiquement l’auteur, le nom de l’exercice et la date de réalisation du script (B) 3 . Suivent
(C) les instructions d’importation des modules utilisés (si nécessaire). Le script se poursuit
par la définition (D) d’éventuelles fonctions. On trouve finalement (E) le corps principal du
programme, entité souvent identifiée, dans la pratique, par l’interpréteur __main__ 4 .
On se rappellera que l’on peut exécuter [Link] de différentes manières : depuis un shell
(fenêtre de terminal / commande) en frappant, python [Link] ou depuis un programme comme
Thonny ou TigerJython.
# !/usr/bin/env python # (A)
# Prenom et NOM de l’auteur :: Exercice monScript :: Date # (B)
Pour manipuler un fichier, il faut d’abord l’ouvrir, ce qui est exécuter avec la commande open,
à savoir :
fd = open(fichier, mode).
Le descripteur de fichiers ou fd retournra un objet – fichier, définit par le nom du fichier, avec
son chemin d’accès (path) s’il n’est pas dans le répertoire du script - à moins de changer préa-
lablement de répertoire courant avec [Link](path).
Le mode d’accès ou mode est une chaîne définissant la manière d’accèder au fichier (voir après
l’exemple) ; en l’absence de ce paramètre, fichier sera ouvert en mode rt.
fd = open("[Link]", "w")
# ouverture nouveau fichier en ecriture
import sys
try:
fd = open("[Link]", "r")
except IOError as err:
error([Link]) # erreur => abandon
# ... suite du programme si OK
— "r" permet l’accès en lecture seule et une erreur s’affiche si le fichier n’existe pas
3.5. MANIPULATION DE FICHIERS 59
— "w" donne accès en écriture et, si le fichier n’existe pas, il est créé (/ !\s’il existe, son contenu
est écrasé)
— "r+" autorise l’accès en lecture et écriture, permettant ainsi de lire et intercaler des don-
nées dans le fichier
La fermeture du fichier s’effectue logiquement avec [Link](). En cas d’oubli, tous les fi-
chiers ouverts sont automatiquement fermés à la sortie du programme. Pour des raisons pé-
dagogiques et présentation, dans la théorie ci-dessous, nous continuerons d’utiliser les com-
mandes open et close, même si, dans la pratique (y.c. dans l’aide mémoire), on préférera
souvent utiliser soit with open ... as fd: qui fonctionne de la même manière qu’une
boucle, et donc se prête bien au fichiers volumineux, fermant l’ouverture du fichier à la fin de
celle-ci (voir solution 3b, point C du chapitre suivant), soit en passant, pour des fichiers peu
volumineux, directement par des variables (voir point A du chapitre ci-après).
# ... suite de l’exemple ci-dessus :
[Link]() # fermeture du fichier
[Link] # => True
— d’une traite
Dans les exemples qui suivent, on utilisera le fichier [Link] contenant les 3 lignes suivantes :
1ere ligne
2e ligne
fin
A Pour la lecture d’une traite (fichiers pas trop volumineux, moins de 5 Mb, soit moins de
50k lignes de texte ou 100k occurrences d’un champs d’une base de données), on dispose
de deux méthodes :
— read() place le contenu sur une seule chaîne, y compris les retours à la ligne (\n)...
on pourrait, dans ce cas, réaliser un découpage avec chaî[Link]("\n"), mais
on a dans ce cas meilleur temps d’utiliser la méthode suivante
— readlines() place le contenu sur une liste qui contiendra autant d’éléments que
de lignes du fichier, chaque élément étant terminé par un retour à la ligne (\n)
60 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
# Ouverture
fd = open("[Link]", "r")
# Fermeture
[Link]()
B Si le fichier est volumineux (plus de 5 Mb, soit 50k lignes de texte ou 100k occurrences
d’un champs d’une base de données), la lecture d’une seule traite n’est pas appropriée
(saturation mémoire), on peut alors utiliser la méthode read(n) de lecture par paquets
de n caractères
C Une lecture ligne par ligne peut s’avérer judicieuse si l’on veut analyser chaque ligne au
fur et à mesure de la lecture, ou que le fichier est très volumineux (et qu’on ne veut / peut
pas le charger en mémoire), plusieurs méthodes :
— readline() qui lit le fichier jusqu’à ce que la ligne soit vide, signe que l’on est alors
arrivé à la fin du fichier (en cas de ligne vide dans le fichier, la variable ligne n’est
3.5. MANIPULATION DE FICHIERS 61
# Solution 1 -----------------------------------------------------
fd = open("[Link]", "r")
while True: # boucle sans fin, sauf si break
ligne = [Link]()
if not ligne: break # sortie de boucle,
print([Link]()) # identique a if len(ligne)==0: break
[Link]()
Pour garantir de bonnes performances, l’écriture est par défaut mise en mémoire, mémoire
tampon qui est bien entendu entièrement vidée une fois que les données sont stockées dans le
fichier et le fichier fermé avec l’instruction [Link](). Les différentes méthodes d’écriture
sont les suivantes :
62 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
A write(chaîne) écrit dans le fichier la chaîne donnée (n’envoie pas de retour à la ligne
après la chaîne, donc on est appelé à écrire soi-même des \n là où l’on veut des retours à
la ligne.
C print(...) à qui l’on passe l’argument file = fd pour écrire dans un fichier (se
comporte de façon standard, donc envoie par défaut un retour à la ligne après l’écriture,
à moins d’ajouter le paramètre end = "" et terminer l’execution du script avec une chaîne
vide).
fd = open("[Link]", "r")
[Link]() # => 0 (position a l’ouverture)
[Link]()
64 CHAPITRE 3. CONCEPTS GÉNÉRAUX POUR LA RÉDACTION DE SCRIPTS
Exemple
# Matrice 2x3
matrice = [[1, 2, 3], [4, 5, 6]]
Pour améliorer la lisibilité, on peut formater le code avec des retours à la ligne :
# Matrice 2x3 avec retours a la ligne
matrice = [
[1, 2, 3],
[4, 5, 6]
]
Autre exemple
Dans ce plan, le nombre ’1’ signifie qu’un siège est réservé et le ’0’ qu’il est libre :
# Plan des sieges d’un theatre
plan_sieges_theatre = [
[0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
Exemples
Afficher la première ligne de la matrice :
print(matrice[0]) # Resultat: [1, 2, 3]
Modifier un élément :
matrice[0][1] = 10
print(matrice)
3.6. TABLEAUX ET MATRICES 65
Résultat :
matrice = [
[1, 10, 3],
[4, 5, 6],
[10, 11, 12]
]
Exemple
ma_phrase = "Bonjour!"
print(ma_phrase[2]) # Affiche ’n’
PRÉSENTATION DE MODULES
PYTHON CLÉS
4.1 Matplotlib
Matplotlib est une bibliothèque standard pour la création de graphiques.
import [Link] as plt
66
4.1. MATPLOTLIB 67
y
Une fois une fenêtre ouverte, on peut alors dessiner librement
à l’intérieur à l’aide de divers fonctions. La fonction lines()
permet par exemple de dessiner des lignes et donc, par exemple,
de créer un triangle.
x
import [Link] as plt
import [Link] as mlines
[Link](0, 4)
[Link](0, 3)
[Link]()
Ce genre de programme peut rapidement se compliquer, c’est pourquoi nous n’allons pas nous
y attarder. Il est important de noter qu’il est souvent utilisé pour illustrer des événements.
Nous l’utiliserons donc pour illustrer notre prochain module.
68 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
La chance joue un rôle important dans notre vie de tous les jours. On parle de "chance" ou de
"hasard" pour désigner les événements qui ne sont pas prédictibles. Ce dernier joue un rôle
important dans les jeux : si le dé n’est pas truqué, lorsque l’on jette un dé, le résultat que l’on
obtient (entre 1 et 6) est complètement aléatoire. L’ordinateur se prête à merveille à la réa-
lisation d’expériences stochastiques 1 car il permet d’exécuter, sans effort, un nombre impor-
tant d’expériences.
La fonction random() retourne des nombres 25
- flottants, qui ne sont donc pas des entiers
20
- uniformément distribués entre 0 (inclus)
et 1 (exclus). Pour l’utiliser, il est nécessaire
Nombre
15
d’importer le module random. La fonction
10
randint(start, end) renvoie, elle, un nombre
aléatoire entier compris entre start et end 5
ESSAI = 100
[Link]("# d’essai: " + str(ESSAI))
[Link]("Valeur du de") # Titre et labels de l’axe
[Link]("Nombre")
# Valeurs aleatoires
essai = [randint(1, 6) for k in range(ESSAI)]
[Link](0, 7) # Limite
[Link](0, max(counts) * 1.1)
4.3 Turtle
import turtle
Lignes et couleurs
La tortue dessine sa trace en utilisant un crayon de couleur qu’il est possible de personnali-
ser avec certaines instructions . Aussi longtemps que le crayon est posé, la tortue dessine. Il
est possible d’interrompre ce comportement avec l’instruction [Link]() qui va lever
le crayon et empêcher la tortue de dessiner. On reposera le crayon avec pendown() de sorte
que la tortue se remette à dessiner la trace. L’option [Link]() permet par ailleurs de
dessiner un rond d’une taille donnée.
Le programme suivant ordonne à la tortue de dessiner une bougie avec une ligne rouge très
large. On règle la largeur de la trace avec l’instruction [Link]().
import turtle # BOUGIE
t = [Link]()
# FLAMME
[Link](50)
[Link]() # Baisser le stylo pour dessiner
[Link]("yellow")
[Link](40)
# MECHE
[Link](5)
[Link]("black")
[Link](15) # Reculer
# CACHER LA TORTUE
[Link]()
Pour dessiner un carré, la tortue avance tout droit, puis tourne de 90 degrés (360/4). Si l’on
veut dessiner plusieurs carrés un tel programme deviendrait rapidement long... très long ! À
l’aide de l’instruction for... on demande à la tortue de répéter une série d’instructions in-
dentées. Attention de ne pas oublier les deux points : après la structure.
import turtle
# CARRE
for k in range(4):
[Link](100) # Avancer de 100 pixels
[Link](360/4) # 90 degres a gauche
Séquences imbriquées
import turtle
# 20 REPETITIONS
for k in range(20):
4.3. TURTLE 71
# CARRE
for k in range(4):
[Link](80) # Avancer de 80 pixels
[Link](360/4) # 90 degres a gauche
[Link](360/20) # 18 degres de rotation a droite apres avoir
# dessine le carre
def square():
for k in range(4):
[Link](100)
[Link](360/4)
Quand on utilise la commande forward(), la valeur qu’on met entre les parenthèses est ce
qu’on appelle un paramètre.
Pour rendre une commande plus flexible, on peut lui préciser un paramètre en écrivant quelque
chose comme def square(longueur):. Quand on utilise square(80), la tortue dessi-
nera un carré de 80 pixels de côté.
import turtle
def square(longueur):
for k in range(4):
[Link](longueur)
[Link](360/4)
72 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
[Link]("red")
square(80)
[Link](180)
[Link]("green")
square(50)
On peut même ajouter plus de paramètre à la commande. Par exemple, on pourrait écrire def
square(longueur, couleur) pour ajouter un paramètre de couleur... ainsi, square(100,
"red") dessinerait un carré rouge de 100 pixels de côté.
import turtle
square(100, "red")
Variables
Pour rendre notre programme plus interactif et capable de dessiner des carrés de différentes
tailles, on peut demander à l’utilisateur de choisir la taille du carré. Pour cela, passera par la
définition de variables.
def square(longueur):
for k in range(4):
[Link](longueur) # Utilisation du parametre
[Link](360/4)
On utilise ici input() pour saisir un nombre et int pour le traduire en nombre, nombre qui
est stocké dans une variable nommée cote. Quand on appelle la fonction square(), on uti-
lise la variable cote pour passer sa valeur au paramètre longueur de la fonction.
4.3. TURTLE 73
Quand vous prenez des décisions dans la vie quotidienne, elles dépendent souvent de certaines
conditions. Par exemple, comment vous allez à l’école peut dépendre du temps qu’il fait. En
programmation, on utilise aussi des conditions pour décider quelles instructions le programme
doit exécuter. Si une condition est vraie, le programme suit un chemin, sinon, il en prend un
autre.
Si vous entrez la taille d’un carré dans un programme, ce dernier ne devrait dessiner le carré
que si la taille est raisonnable. Si la taille est trop grande, il affichera un message d’erreur.
En programmation, on utilise la structure if pour vérifier ce genre de conditions.
import turtle
def square(longueur):
for k in range(4):
[Link](longueur)
[Link](90)
Imaginez que vous voulez dessiner des carrés de différentes couleurs en utilisant la commande
[Link](). En utilisant une structure if, le programme peut choisir la cou-
leur en fonction d’un nombre que vous entrez. Si vous tapez 1, il dessine en rouge ; si c’est 2,
en vert ; et ainsi de suite.
def square():
for k in range(4):
[Link](100)
[Link](90)
if n == 1:
[Link]("red")
elif n == 2:
[Link]("green")
else:
[Link]("black")
turtle.begin_fill()
square()
turtle.end_fill()
Nous avons déjà utilisé la commande for à de nombreuses reprises pour répéter certaines
74 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
actions. Cependant, en Python, on utilise plus souvent la boucle while pour répéter des ins-
tructions tant qu’une condition donnée est vraie. Vous pouvez par exemple dessiner une spi-
rale rectangulaire avec une boucle while en augmentant progressivement la taille de la spi-
rale à chaque tour de la boucle de la manière suivante.
import turtle
a = 5
while a < 200:
[Link](a)
[Link](360/4)
a = a + 2
En dessinant des figures, vous pouvez vouloir changer de couleur ou de forme en fonction de
certaines conditions. Par exemple, vous pouvez alterner les couleurs ou choisir la taille d’une
tranche en fonction des sa position.
import turtle
def triangle():
for k in range(3): # Dessiner un triangle
[Link](100) # Avancer de 100
[Link](360/3) # Tourner de 120
Parfois, vous devez pouvoir arrêter une boucle même si sa condition est toujours vraie. Vous
pouvez utiliser pour cela le mot-clé break.
import turtle
def square(longueur):
for k in range(4): # Carre
[Link](longueur) # Avancer de la longueur du cote
[Link](90) # Tourner de 90
4.3. TURTLE 75
i = 0
while True:
if i > 120:
break
square(i) # Dessine un carre de cote i
[Link](360/60) # Tourner de 6
i += 2
Afin d’évier les problèmes, il est préférable que, quand un programme demande de saisir une
grandeur, il vérifie la saisie. Un bon programme répète la question jusqu’à ce qu’il obtienne
une réponse acceptable...
import turtle
n = 0
while n < 1 or n > 3:
n = int(input("Saisir une valeur entre 1 et 3: "))
if n == 1:
[Link]("red")
elif n == 2:
[Link]("green")
else:
[Link]("yellow")
def escalier(n):
marche()
escalier(n-1)
Et on terminera la boucle en indiquant qu’il n’est plus utile de construire des marches (que le
nombre de marche est nul) à l’aide de la condition suivante :
76 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
if n == 0:
return # similaire a quit()
def marche():
[Link](d)
[Link](a)
[Link](d)
[Link](a)
def escalier(n):
if n == 0: # Condition de sortie de la boucle
return
marche()
escalier(n - 1) # Fonction recursive
escalier(3)
[Link]()
Dans la nature, une tortue est un individu ayant sa propre identité. On pourrait d’ailleurs
donner à chaque tortue un nom, par exemple, Quick et Flupke. On remarquera aussi que les
tortues ont des caractéristiques communes : elles ont des carapaces et appartiennent à la classe
animale des reptiles. Cette notion de classes et d’individus est une notion fondamentale en in-
formatique, que l’on appelle programmation orientée objets (POO).
Lorsque on écrit quick = [Link](), on crée une tortue nommée Quick. Si vous
écrivez flupke = [Link](), vous créez une autre tortue appelée Flupke. Vous
aurez, ce qu’on appelle, en programmation, deux acteurs ou occurences de l’objet Turtle.
Les objets (acteurs ou occurences) similaires sont groupés par classes. Les objets d’une cer-
taine classe sont fabriqués (on dit aussi instanciés) en utilisant le nom de la classe (suivi de
parenthèses). Les fonctions rattachées à une certaine classe sont appelées des méthodes.
Illustrons cela par un exemple :
import turtle
[Link]()
Pour que les deux tortues soient ensemble, on va créer un espace commun, une fenêtre (en
anglais Screen) appelée enclos. Dans le programme suivant, Quick dessine une échelle
bleue verticale, et Flupke dessine une échelle noire horizontale.
import turtle
# VARIABLES
enclos = [Link]() # Instance de la classe Screen()
# pour avoir la fenetre de dessin
quick, flupke = [Link](), [Link]()
qc, fc = "blue", "black"
d, b, n, p = 50, 4, 7, -200 # p: position
[Link](qc), [Link](fc)
[Link](qc), [Link](fc)
[Link](p, 0), [Link](0, p)
Pour simplifier le code, on pourrait utiliser une seule et même fonction, en lui passant le nom
de l’objet en paramètre. Exemple : si on crée une fonction barre(o), on peut dire quelle tortue
(par exemple, Quick ou Flupke) doit suivre les instructions pour dessiner un barreau d’échelle.
En appelant barre(quick) puis barre(flupke), on fait bouger d’abord Quick, puis Flupke, de
sorte qu’il n’y a pas de collisions (les mouvements sont supperposés).
import turtle
78 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
# FONCTION
def barre(o):
for _ in range(b):
[Link](d)
[Link](360/b)
[Link](d)
# VARIABLES
enclos = [Link]()
quick, flupke = [Link](), [Link]()
qc = "green"
d, b, n, p = 50, 4, 7, -200
[Link](qc)
[Link](p, 0), [Link](0, p)
[Link]()
4.4. PYGAME 79
4.4 Pygame
Développer un jeu vidéo sans utiliser la programmation orientée objet est un vrai défi, car les
éléments du jeu et tous les objets qui interagissent dans leur environnement sont en fait des
objets qui travaillent ensemble.
La première étape consiste à créer la fentre de jeu. Par exemple, nous pouvons utiliser une
bibliothèque appelée "pygame"...
import pygame, time
[Link]()
l, h = 600, 400
fenetre = [Link].set_mode((l, h))
[Link]()
def bouger(self):
80 CHAPITRE 4. PRÉSENTATION DE MODULES PYTHON CLÉS
self.y += [Link]
while enCours:
for action in [Link]():
if [Link] == [Link]:
enCours = False
[Link]("gray")
[Link](fenetre)
[Link](fenetre)
[Link]()
[Link]()
[Link]()
[Link]()
À noter, qu’afin de garantir une fermeture propre, il faut une boucle qui teste à chaque itéra-
tion si la valeur booléenne enCours est toujours valable, pour, effectivement, ne pas avoir un
jeu qui continue indéfiniment à fonctionner alors que la fenêtre est fermée.
[Link]()
[Link] = vitesse
def bouger(self):
self.y += [Link]
ballons = [] # Liste
AJOUT_BALLON = [Link] + 1
[Link].set_timer(AJOUT_BALLON, 1000) # 1000ms == 1sec.
while enCours:
for action in [Link]():
if [Link] == [Link]:
enCours = False
elif [Link] == AJOUT_BALLON:
nouveauBallon = objetMouvement([Link](0, l), 0, 10, 0.1)
[Link](nouveauBallon)
[Link]("gray")
[Link]()
[Link]()
4.4.3 Interactions
Le but est d’empêcher que les ballons touchent le sol en cliquant dessus avec la souris. Si un
ballon atteint le sol, le joueur perd alors un point.
Pour utiliser la souris dans le jeu, nous devons ajouter une fonction supplémentaire qui véri-
fie où l’on clique. Si on clique sur un ballon, il sera alors identifié et enlevé du jeu. Si on clique
sur un endroit vide, il ne se passe rien de particulier.
import pygame, random
[Link]()
self.x = x
self.y = y
[Link] = rayon
[Link] = vitesse
def bouger(self):
self.y += [Link]
while enCours:
for action in [Link]():
if [Link] == [Link]:
enCours = False
elif [Link] == [Link]:
pos = [Link].get_pos()
for ballon in ballons[:]:
if ballon.est_clique(pos): # Verifie si un ballon est clique
[Link](ballon)
elif [Link] == AJOUT_BALLON:
nouveauBallon = objetMouvement([Link](0, l), 0, 10, 0.1)
[Link](nouveauBallon)
[Link]("gray")
[Link]()
[Link]()
Chapitre 5
DÉVELOPPEMENT
D’APPLICATIONS : EXEMPLES
WEB
Nous aborderons ici les concepts fondamentaux tels que les métadonnées, les langages HTML
et CSS, la planification et la création d’un site web simple, la gestion des fichiers, ainsi que
les différentes méthodes pour publier votre site en ligne. Nous terminerons par une introduc-
tion aux systèmes de gestion de contenu (CMS).
83
84 CHAPITRE 5. DÉVELOPPEMENT D’APPLICATIONS : EXEMPLES WEB
Principales commandes
Mise en forme du texte
Les commandes suivantes permettent de mettre en valeur certaines parties du texte : **gras**
en gras, *italique* en italique, _souligné_ en souligné et ‘code‘ (accents graves) en
code. Pour ajouter un retour à la ligne, il suffit de taper \.
Titres et sous-titres
Utiliser le caractère # suivi d’un espace permet de créer des titres. Exemples : # Titre 1
pour les titres et ## Titre 2 pour des sous-titres.
Listes
Les listes sont simplement créés grâce aux tirets -, * ou +, précédés éventuellement d’une ta-
bulation (cas des listes imbriquées). Pour les listes numérotées, il suffit de commencer par un
nombre, puis de continuer avec des 0.
1. Abricot 1. Abricot
0. Pomme 2. Pomme
- golden donnera o golden
0. Raisin 3. Raisin
5.3. INTRODUCTION AU HTML ET CSS 85
Tableaux
On peut facilement organiser des données sous forme de tableau. Par exemple :
| Colonne A | Colonne B |
|-----------|-----------|
| a | b |
Bloc de code On affiche le code grâce aux trois accents graves (‘‘‘). Tant que les trois ac-
cents graves ne sont pas remis, Markdown considère que le texte est un exemple de code.
Liens et images
Insérer un lien : [Lien]([Link] représente un lien vers EDUGe
Insérer une image : , on utilisera soit
le code html <!-- Commentaire invisible -->, ou, sur une ligne entière
[Commentaire non visible]::.
<!DOCTYPE html>
iLi
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>SITE</title>
</head>
<body>
<h1>Bienvenue</h1>
<p>Ceci est le premier paragraphe.</p>
</body>
</html>
Composants clés
<header>
<nav><!-- Liens de navigation --></nav>
</header>
<main>
<h1 id="titre">Bienvenue</h1>
<p>Ceci est un paragraphe.</p>
<img src="[Link] alt="Carre gris">
</main>
<footer>
<small>© - Prenom</small>
</footer>
<main></main> contenu principal de la page (un seul <main> par page). Cela permet de
différencier cette partie des en-têtes et pieds de page.
<img src="..."> insertion d’une image. src indique l’adresse de l’image et alt affiche
un texte alternatif si l’image ne peut pas être chargée. Exemple : alt="Carré gris".
<style>
/* Styles CSS */
</style>
— Un seul fichier CSS peut être utilisé pour styliser plusieurs pages
Avant de commencer à coder, il est essentiel de bien planifier et concevoir votre site web. Cette
étape vous aidera à définir clairement vos objectifs et à structurer votre contenu de manière
efficace.
88 CHAPITRE 5. DÉVELOPPEMENT D’APPLICATIONS : EXEMPLES WEB
5.5.1 Arborescence
/projet_web
/site
[Link]
/images
/css
/js
— Chemin absolu Pour référencer des fichiers situés en dehors du site, exemple :
<img src="[Link]
La version hébergée propose des options gratuites et payantes pour personnaliser son site...
cette contrainte rend malheureusement difficile son utilisation dans un environnement comme
le notre !
BASES DE DONNÉES
Exercices p. 167, aide-mémoire p. 178
Une base de données permet de structurer et de stocker les données de manière organisée,
évitant les redondances et les erreurs que l’on trouve souvent dans des fichiers comme les ta-
bleurs Excel. Un système de gestion de base de données (SGBD) permet de manipuler ces don-
nées efficacement et en toute sécurité. Il existe plusieurs types de bases de données, chacune
optimisée pour des cas spécifiques.
90
6.1. MODÉLISATION 91
6.1 Modélisation
Pour numériser une réalité, il est nécessaire de la modéliser (par exemple, sous la forme d’un
schéma du système étudié). Ce processus se déroule généralement étape par étape, en repré-
sentant d’abord les objets qui composent le système (les entités), puis les relations existantes
entre ces objets. La modélisation d’une base de données se fait en procédant par niveaux (nous
nous concentrerons ici uniquement sur les systèmes de gestion de bases de données relation-
nelles SGBDR) : du niveau conceptuel au niveau physique, en passant par le niveau logique.
Entité et attributs
Une entité représente un objet ou un concept du monde réel, tandis qu’un attribut est une ca-
ractéristique de cette entité. Par exemple, dans une base de données pour un contrat d’héber-
gement web, les entités pourraient être CLIENT, SITE, CONTRAT, PROJET avec des attri-
buts comme identifiant / référence, nom, nom de domaine, etc. On notera que l’entité CONTRAT
n’existe que si l’entité CLIENT correspondante existe (l’inverse n’étant pas forcément vrai).
La présence d’un attribut peut être nécessaire et obligatoire pour décrire un objet ou alors,
optionnelle. L’important est que chaque attribut soit non divisible, par exemple avec unique-
ment une seule adresse (ce qu’on appelle la première forme normale) et qu’il corresponde uni-
quement à l’entité qu’il décrit (deuxième forme normale).
92 CHAPITRE 6. BASES DE DONNÉES
L’identifiant est composé d’un ou plusieurs attributs qui permettent d’identifier de manière
unique chaque enregistrement d’une entité. Par exemple, la référence du contrat peut servir
d’identifiant unique pour l’entité CONTRAT. Une clé primaire identifie de manière unique
chaque enregistrement dans une table, tandis qu’une clé étrangère permet de lier des tables
entre elles. Par exemple, dans une relation entre un CLIENT et ses CONTRATS, la clé pri-
maire du CLIENT pourrait être utilisée comme clé étrangère dans la table CONTRAT pour
lier les enregistrements.
Le modèle logique est une étape clé dans le processus de conception d’une base de données
relationnelle. Il s’agit de qualifier les attributs (int, char, date, etc.), d’ajouter les clés étran-
gères, d’éliminer les redondances et les anomalies en suivant les principes des formes nor-
males ce qui, le cas échéant, signifie parfois de créer des tables supplémentaires.
Relations et cardinalité
Les relations décrivent les liens logiques entre les entités. Par exemple, un CLIENT peut avoir
plusieurs CONTRATS, ce qui définit une relation "un à plusieurs". La cardinalité indique le
nombre de participations d’une entité dans une relation, comme "1-1", "0-N", ou "1-N", décri-
vant les connexions minimales et maximales possibles.
— Cadinalité un à un ou zéro à un Si un site web ne peut être inclus que dans un seul
contrat, et qu’un contrat n’a qu’un seul site d’ébergement possible.
— Cadinalité un à plusieurs Une personne peut avoir plusieurs contrats, mais chaque
contrat n’est lié qu’à une seule personne.
— Plusieurs à plusieurs Par exemple, dans les cas où une personne peut travailler sur
plusieurs projets, et qu’un projet donné peut intégrer plusieurs personnes à la fois.
6.1. MODÉLISATION 93
Formes normales
— 1ère forme normale (1FN) Chaque champ doit contenir des valeurs uniques
— 3ème forme normale (3FN) Aucun attribut ne doit dépendre d’un autre attribut non
clé primaire
Prenons l’exemple d’une bibliothèque, avec une table qui recense les emprunts de livres par
des adhérents :
Id Nom Livres Auteurs
2 1 2 2 Hamlet W. Shakespeare
A priori, plus aucun redondance dans les tables correspondantes aux divers entités !...
94 CHAPITRE 6. BASES DE DONNÉES
Id Livres Auteur
1 1984 G. Orwell
2 Hamlet W. Shakespeare
3 Othello W. Shakespeare
1 G. Orwell 1 1984 1
2 W. Shakespeare 2 Hamlet 2
3 Othello 2
Reprenons notre exemple du chapitre précédent : celui de la table PERSONNE avec l”adresse
de notre école, Route de Base 24 1228 Plan-les-Ouates. Ce type de données pré-
sente plusieurs risques d’erreurs : entre autres, répétition des noms de communes et inco-
hérences dans l’orthographe de ces derniers. Typiquement, cela se produit si les attributs ne
respectent pas les formes normales, où...
1. Chaque valeur des attributs est atomique, non répétitive et constante dans le temps
2. Une dépendance stricte des attributs vis-à-vis de l’identifiant unique (sans redondances)
est exigée
3. Un attribut n’appartenant pas à la clé primaire ne dépend pas d’un autre attribut
qui n’est pas non plus une clé primaire (ce qui serait par exemple le cas si l’on a une table
COMMANDE qui inclut l’identifiant de la commande — clé primaire, l’identifiant de la per-
sonne et son nom...).
Pour éviter ces problèmes, nous procéderons donc à la normalisation des données en créant,
dans l’exemple ci-dessus, une table séparée, COMMUNE, qui centralisera les informations spé-
cifiques aux communes (nom, code postal, etc.). Cela permet de réduire la redondance, d’amé-
liorer la cohérence des données et de respecter les exigences des formes normales. Illustré par
un schéma, nous obtenons un modèle de données plus robuste.
6.1. MODÉLISATION 95
PERSONNE
COMMUNE CONTRAT
Id int
Id int Ref int
Nom
CodePostal Date
Adresse
Nom [Link]
[Link]
SITE WEB
PROJET
IP char
Numero int
Domaine
Titre
[Link]
Remarquons dans le schéma ci-dessus le problème entre PERSONNES et PROJET où il est im-
possible de relier une personne et un projet. C’est, ici aussi, une question de normalisation
des données.
PERSONNE
CONTRAT SITE WEB
Id int
Ref int IP char
Nom
Date Domaine
Adresse
[Link] [Link]
[Link]
travaille PROJET
Cela créera une nouvelle base de données nommée clients. Si le fichier existe déjà, SQLite
ouvrira une connexion à la base existante ; s’il n’existe pas, SQLite la créera. À ce stade, votre
invite changera, et un nouveau préfixe, sqlite>, apparaîtra.
Si le fichier [Link] n’existe pas encore et si vous quittez l’invite SQLite sans exécu-
ter de requêtes, la base ne sera pas créée. Pour vous assurer que le fichier est bien créé, vous
pouvez exécuter une requête vide en tapant ; suivi de la touche Enter. Pour renommer le
nom fournit par défaut, on utilisera la commande ATTACH DATABASE ’[Link]’ AS
clients;. En cas d’erreur, il est toujours possible de quiter la sessions avec les touches
Ctrl + D.
La base de données clients étant créée (à vérifier avec la comande .database), nous al-
lons maintenant créer une nouvelle table et y insérer des données.
Les bases de données sont organisées en tables, qui stockent les informations (comme des feuilles
de calcul Excel que l’on peut relier entre elles). Créons une première table inspirée de la table
COMMUNE du chapitre précédent. Notez que, contrairement à Python, les commandes SQL se
terminent par un point-virgule ;.
— Un identifiant (id)
— Le code postal
— Le nom de la commune
La création de la table peut être validé à l’aide de la commande .table. À noter que l’utili-
sation de NOT NULL rend ce champ obligatoire. Insérons maintenant trois lignes de valeurs
dans la table clients créée précédemment :
6.2. LANGUAGE SQL ET SYSTÈMES DE GESTION DES BASES DE DONNÉES (SGBD)97
Comme nous avons spécifié NOT NULL pour chacune des colonnes de votre table, nous devons
entrer une valeur pour chacune d’elles. Par exemple, si vous essayez d’ajouter un autre client
sans indiquer sa taille :
INSERT INTO PERSONNES VALUES (4, "Fribourg");
Vous recevrez une erreur indiquant qu’il manque la valeur d’une colonne. La commande cor-
recte étant
INSERT INTO COMMUNE VALUES (4, 1700, "Fribourg");
Durant cette étape, nous allons nous concentrer sur les méthodes les plus simples pour lire
les données d’une table. Pour afficher la table avec toutes les valeurs insérées, utilisez la com-
mande SELECT :
SELECT * FROM COMMUNE;
1|1100|Lausanne
2|1200|Genève
3|1950|Sion
4|1700|Fribourg
Pour afficher une entrée spécifique en fonction de son identifiant, ajoutez la clause WHERE à
la requête :
SELECT * FROM COMMUNE WHERE id = 2;
Cela retournera uniquement la commune identifiée par le numéro 2. Examinons cette com-
mande :
1. Tout d’abord, nous sélectionnons avec SELECT toutes les valeurs (*) de notre table
2. Ensuite, nous appliquons une condition avec WHERE pour ne sélectionner que les entrées
où id est égal à 2
Un opérateur de comparaison dans une clause WHERE définit comment une colonne doit être
comparée à une valeur. Voici quelques opérateurs de comparaison SQL courants :
98 CHAPITRE 6. BASES DE DONNÉES
= Égalité != Inégalité
IS NOT NULL Valeur n’est pas NULL IS NULL Valeur est NULL
</> Inférieur / supérieur à LIKE Valeur correspond à un mo-
dèle donné
BETWEEN Valeur est dans une plage IN Valeur est dans un en-
donnée semble de valeurs
Ajout de colonnes
SQLite vous permet de modifier vos tables à l’aide de la commande ALTER TABLE. Utilisez
ALTER TABLE pour ajouter une nouvelle colonne à la table COMMUNE pour identifier la langue
parlée dans une ville donnée.
Vous avez maintenant une quatrième colonne langue dans votre table.
Utilisez la commande UPDATE pour ajouter des valeurs pour chacune des communes...
À noter qu’avec le table MySQL, il est possible d’ajouter directement une valeur par défault.
Vous avez ainsi modifié la structure de votre table et mis à jour les valeurs qu’elle contient.
Suppression d’informations
La commande suivante supprimera toutes les communes dont le code postal est > 1500
En tapant SELECT * FROM clients; vous pourrez vérifier que Sion et Fribourg ont
été supprimées. Seules restent les villes de Lausanne et Genève.
6.3. GESTION AVANCÉE DES BASES DE DONNÉES 99
Bien souvent il existe plusieurs tables : notre table actuelle COMMUNE et une table PERSONNE,
avec une valeur id qui correspond à un identifiant dans votre table COMMUNE. Si vous voulez
interroger des données des deux tables, vous devez soit utiliser l’une des quatre commandes
de jointure suivante :
Soit déclarer une clé étrangère. C’est cette deuxième option, plus fréquente que la première
que nous allons étudier.
2|1200|Geneve|fr|1|Prénom NOM|Adresse|2
Notez que le résultat inclut également la valeur id de PERSONNE. Vous pouvez spécifier l’af-
fichage souhaitée avec une commande plus explicite :
Prénom NOM|1200|Geneve|fr
Vous avez joint avec succès des informations provenant de plusieurs tables, bravo ! Générali-
sons maintenant quelques concepts.
100 CHAPITRE 6. BASES DE DONNÉES
Les traits de soulignement (_) sont utilisés pour représenter un seul caractère inconnu :
La fonction COUNT est utilisée pour trouver le nombre d’entrées dans une colonne donnée. La
syntaxe suivante renverra le nombre total de valeurs contenues dans la colonne :
Vous pouvez affiner les résultats d’une fonction COUNT en ajoutant une clause WHERE, comme
ceci :
Valeur moyenne
La fonction AVG est utilisée pour trouver la moyenne parmi les valeurs contenues dans une
colonne spécifique. Notez que la fonction AVG ne fonctionnera qu’avec des colonnes contenant
des valeurs numériques ; lorsqu’elle est utilisée sur une colonne contenant des valeurs de chaîne,
elle peut renvoyersoit une erreur, soit 0.
La fonction SUM est utilisée pour trouver le total de toutes les valeurs numériques contenues
dans une colonne :
Comme avec la fonction AVG, si vous exécutez la fonction SUM sur une colonne contenant des
valeurs de chaîne, elle peut renvoyer une erreur ou simplement 0, selon le système de gestion
de base de données (SGBD) utilisé.
6.3. GESTION AVANCÉE DES BASES DE DONNÉES 101
Pour trouver la plus grande valeur numérique d’une colonne ou la dernière valeur par ordre
alphabétique, utilisez la fonction MAX :
Pour trouver la plus petite valeur numérique dans une colonne ou la première valeur par ordre
alphabétique, utilisez la fonction MIN :
Pour effectuer la même action, mais trier les résultats par ordre décroissant ou par ordre al-
phabétique inverse, ajoutez la requête avec DESC :
GROUP BY
La clause GROUP BY est similaire à la clause ORDER BY, mais elle est utilisée pour trier les
résultats d’une requête qui inclut une fonction d’agrégation telle que COUNT, MAX, MIN ou
SUM. En soi, les fonctions d’agrégation décrites plus haut ne renverront qu’une seule valeur.
Cependant, vous pouvez voir les résultats d’une fonction d’agrégation appliquée à chaque va-
leur correspondante d’une colonne en incluant une clause GROUP BY.
Pour effectuer la même action, pour regrouper les résultats par ordre décroissant ou par ordre
alphabétique inverse, ajoutez la requête avec DESC :
Nous allons nous intéresser au module sqlite3 de Python. Comme précédement, nous al-
lons créer une connexion à une base de données SQLite, ajouter une table à cette base de don-
nées, insérer des données dans cette table, puis lire et modifier ces données, mais cette fois-ci
directement avec un language de programmation, comme c’est le cas par exemple lors de la
programmation de page web en php. Pour tirer le meilleur parti de ce tutoriel, il est donc re-
commandé d’avoir une certaine familiarité avec la programmation.
Partons du modèle utilisé précédement.
Connexion
Lorsque nous nous connectons à une base de données SQLite, nous accédons aux données qui
résident finalement dans un fichier sur notre ordinateur. Nous pouvons nous connecter à une
base de données SQLite en utilisant le module Python sqlite3 :
import sqlite3
connection = [Link]("[Link]")
La commande import sqlite3 donne accès au module sqlite3 dans notre programme
Python. La fonction [Link]() renvoie un objet Connection que nous utilise-
rons pour interagir avec la base de données SQLite contenue dans le fichier [Link]. Le
fichier [Link] est créé automatiquement par [Link]() si [Link]
n’existe pas déjà sur notre ordinateur.
Nous pouvons vérifier que notre objet de connexion a été créé avec succès en exécutant :
print(connection.total_changes)
Remarque : nous pouvons supprimer à tout moment le fichier [Link] de notre ordi-
nateur. il est également possible de se connecter à une base de données SQLite qui réside stric-
tement en mémoire (et non dans un fichier) en passant la chaîne spéciale ":memory:" à [Link]
Par exemple, [Link](":memory:"). Une base de données SQLite en mémoire
disparaîtra dès que votre programme Python se termine. Cela peut être pratique si vous sou-
haitez un bac à sable temporaire pour essayer quelque chose, sans avoir besoin de persister
les données après la sortie de votre programme.
6.4. PYTHON ET LES BASES DE DONNÉES 103
Ajout de données
Maintenant que nous sommes connectés à la base de données SQLite [Link], nous
pouvons commencer à insérer et lire des données. Nous allons créer une table nommée CONTRAT
qui contient les données suivantes :
Deux lignes d’exemples de contrats sont listées : une ligne pour un contrat signé en mai et un
autre signé début septembre.
Nous pouvons créer cette table CONTRAT en utilisant la connexion que nous avons établie
précédement :
cursor = [Link]()
[Link]("CREATE TABLE CONTRAT (
ref INTEGER PRIMARY KEY,
date DATE NOT NULL,
id_personne INTEGER NOT NULL,
FOREIGN KEY (id_personne) REFERENCES PERSONNE(id)
);")
Maintenant que nous avons créé une table, nous pouvons insérer des lignes de données dans
celle-ci :
[Link]("INSERT INTO CONTRAT (ref, date, id_personne) VALUES (1,
’2024-05-13’, 1);")
[Link]("INSERT INTO CONTRAT (ref, date, id_personne) VALUES (2,
’2024-09-01’, 1);")
Nous appelons [Link]() deux fois : une fois pour insérer une ligne pour le re-
quin Sammy dans le bac réservoir 1, et une fois pour insérer une ligne pour la seiche Jamie
dans le bac 7. "INSERT INTO CONTRAT VALUES ..." est une instruction SQL qui nous
permet d’ajouter des lignes à une table.
À l’étape précédente, nous avons ajouté deux lignes à une table SQLite nommée CONTRAT.
Nous pouvons récupérer ces lignes en utilisant une instruction SQL SELECT :
104 CHAPITRE 6. BASES DE DONNÉES
La fonction [Link]() exécute une instruction SELECT pour récupérer les va-
leurs de la table CONTRAT. fetchall() récupère tous les résultats de l’instruction SELECT.
Lorsque nous utilisons print(rows), nous voyons une liste de deux tuples. Chaque tuple
contient trois entrées ; une entrée pour chaque colonne de la table CONTRAT.
Si nous voulons récupérer des lignes dans la table CONTRAT qui correspondent à un ensemble
de critères spécifiques, nous pouvons également utiliser une clause WHERE :
date_contrat = "2024-09-01"
rows = [Link](
"SELECT * FROM CONTRAT WHERE date = ?",
(date_contrat),
).fetchall()
print(rows)
Attention : N’utilisez jamais les opérations de chaîne Python pour créer dynamiquement une
chaîne d’instructions SQL. Utiliser les opérations de chaîne Python pour assembler une chaîne
d’instructions SQL vous rend vulnérable aux attaques. En effet, les attaques (par SQL) peuvent
être utilisées pour voler, altérer ou modifier les données stockées dans votre base de données.
Utilisez toujours le caractère de remplacement ? dans vos instructions SQL pour substituer
dynamiquement les valeurs de votre programme. Passez un tuple de valeurs comme second
argument à [Link]() pour lier vos valeurs à l’instruction SQL.
Nous pouvons pour cela utiliser une instruction with pour nous aider à fermer les objets Connection
et Cursor de manière automatique :
closing est une fonction utilitaire fournie par le module contextlib. Lorsque l’instruc-
tion with se termine, closing garantit que la méthode close() est appelée sur l’objet
qui lui est passé. La fonction closing est utilisée deux fois dans cet exemple. Une fois pour
s’assurer que l’objet Connection renvoyé par [Link]() est automatiquement
fermé, et une deuxième fois pour s’assurer que l’objet Cursor renvoyé par [Link]()
est automatiquement fermé.
[(1,)]
Comme "SELECT 1" est une instruction SQL qui renvoie toujours une seule ligne avec une
seule colonne ayant une valeur de 1, il est logique de voir un seul tuple avec 1 comme seule
valeur renvoyée par notre code.
106 CHAPITRE 6. BASES DE DONNÉES
Les commandes sont tapées dans un terminal en mode texte. Pour démarrer l’interpréteur de
commandes sous Windows, il vous suffit d’aller dans Démarrer → Tous les programmes →
Accessoires → Invite de commandes.
Un premier niveau d’aide vous permet d’avoir accès à la liste des commandes de base dispo-
nibles depuis votre interprète de commandes. Il vous suffit d’utiliser la commande help.
$ help
Il est aussi possible d’obtenir de l’aide sur une commande particulière afin de connaître les
options et les arguments pour l’utiliser. Deux méthodes sont disponibles pour obtenir cette
107
108 CHAPITRE 7. POUR ALLER PLUS LOIN
aide sur une commande : soit à l’aide de la commande help, soit en utilisant l’option / ?
pour une commande donnée.
$ help commande
$ commande /?
7.1.2 Répertoires
Notion de répertoires
Dans le monde Windows, la racine d’un répertoire est appellé par un \. Il existe plusieurs ra-
cines, une par partition ou disque dur sous les systèmes d’exploitation. Chaque partition ou
disque dur sous Windows est identifié par une lettre (attribuée suivant l’ordre de détection).
Le premier disque dur (ou partition) sera noté C:, le deuxième D:, etc. Un système Windows
peut donc inclure de nouveaux disque durs, partition ou périphérique (clé USB, etc.) jusqu’à
la lettre Z: (A: et B: étant généralement réservés pour les lecteurs externes).
Un répertoire qui en contient un autre est dit répertoire parent. Lorsque d’un répertoire on
veut aller au répertoire parent, celui-ci est désigné par .., comme sur la plupart des systèmes.
La commande dir permet de lister le contenu d’un répertoire. Voici un tableau des options
les plus courantes :
Option
Les options de ce tableau peuvent être utilisées séparément ou conjointement. Par exemple :
$ dir /S /P
La commande tree permet l’affichage récursif du répertoire courant sous la forme d’un arbre.
$ tree répertoire
La commande cd permet de se déplacer dans l’arborescence des fichiers. Elle s’utilise en lui
donnant comme argument un répertoire.
$ cd répertoire
7.1. UTILISATION DE SON ENVIRONNEMENT DE TRAVAIL AVEC MS-DOS 109
Note : comme sous Linux, il est possible d’utiliser des chemins relatifs et absolus. Ainsi, pour
remonter dans le répertoire parent, on peut utiliser la commande :
$ cd ..
La commande cd, utilisée sans argument, vous informe sur le contenu du répertoire courant.
La commande cd utilisée avec pour argument \ vous ramène à la racine de l’unité (partition)
en cours.
$ cd \
Pour changer d’unité, il vous suffit de désigner par sa lettre la nouvelle unité sur laquelle vous
souhaitez aller. Imaginez que vous possédez deux unités appelées C: et D:. Vous pouvez ta-
per la lettre en majuscule ou en minuscule.
$ d:
$ md test\test
Option
/I Si la destination n’existe pas et que plus d’un fichier est copié, considérer
la destination comme un répertoire
$ rd test\test
110 CHAPITRE 7. POUR ALLER PLUS LOIN
7.1.3 Fichiers
Gestion des fichiers
Option
/F Force la suppression
Les fichiers batch (.bat) sont des exécutables qui permettent de réaliser une série de commande
DOS en une seule opération. Exemple de fichier batch :
À COMPLÉTER.
7.2. REPRÉSENTATION ALGORITHMIQUE 111
4 1 1 200 200 E2 : = E1 x 2
7 0 0 1600 600 G9 : = F9 / 2
8 0 0 3200 600
7.3.1 Containers
Tuples
Un tuple est comme une liste, mais vous ne pouvez pas changer ses éléments une fois créés
(on dit qu’il est immutable). Les tuples utilisent des parenthèses ().
— Pour un tuple avec un seul élément, ajoutez une virgule après l’élément
Les tuples sont utiles car ils prennent moins de mémoire et sont plus rapides à traiter que les
listes.
Sets
Un set est une collection non ordonnée d’éléments uniques. C’est utile pour des opérations
comme l’union, l’intersection, etc.
mon_set = {1, 2, 3} # Creer un set
Slicing
Le slicing permet d’accéder à des tranches d’une séquence (comme une liste ou un tuple).
ma_liste = [1, 2, 3, 4, 5] # Creer une liste
Remarques
Vous pouvez aussi définir des paramètres, dits optionnels, avec des valeurs par défaut...
7.3. CONCEPTS SPÉCIFIQUES POUR LA RÉDACTION DE SCRIPTS 113
nomFonction(3) # Donne 6 (3 * 2)
nomFonction(3, 3) # Donne 9 (3 * 3)
La portée est le périmètre dans lequel un nom (de variable, fonction. . .) est connu (visible) et
utilisable. Les variables :
# Exemple 1 ---------------------------------------------------
var_globale = 5
def nomFonction():
var_locale = 10
print(var_globale) # Peut acceder a var_globale
nomFonction() # Affiche 5
print(var_locale) # Erreur : var_locale n’est pas definie
# Exemple 2 ---------------------------------------------------
def incremCompt(): # Fonction sans param. d’entree
global compteur # Definition var. globale
if "compteur" not in globals():
compteur = 0 # Initialisation du compteur (si existant)
compteur += 1
print(compteur, "fois")
Fonctions Lambda
Pour des fonctions simples, Python permet l’utilisation de fonctions lambda, qui sont des fonc-
tions anonymes d’une seule ligne.
somme = lambda x, y: x + y # Fonction Lambda
Tkinter est une bibliothèque (module) d’interface graphique intégrée à Python. Elle permet
nottament de créer des applications avec des boutons, des champs de texte et d’autres élé-
ments graphiques. Lors de la rédaction d’application Tkinter on procédera souvent en quatre
étapes :
[Link]() # (D)
Pour intéragir avec les utilisateurs, on aura plus généralement recours aux widgets
Ces éléments sont repris dans le code suivant qui permet de convertir des euros en francs suisses.
import tkinter
# FONCTION
def convertir_devise():
montant = float([Link]())
taux = 1.08 # Taux de change donne
resultat = montant * taux
[Link](text=f"EUR {montant} = CHF {resultat}")
# VARIABLE
tk = tkinter
# WIDGETS
root = [Link]()
[Link]("Convertisseur EUR/CHF")
montantSaisi = [Link](root)
[Link](row=0, column=1, padx=10, pady=10)
[Link]()
116 CHAPITRE 7. POUR ALLER PLUS LOIN
La cryptographie est l’art de protéger des informations. Les définitions suivantes s’appliquent.
• Le cryptage est un processus de transformation d’un message, initialement lisible, en
message codé, de manière :
— symétrique si la clé pour chiffrer et déchiffrer est la même (ex. : César, Vigenère)
— asymétrique si on utilise deux clés différentes, une publique pour chiffrer et une
autre, privée, pour déchiffrer (ex. : RSA)
• Un code (ou message crypté) est un texte rendu illisible par cryptage (ou chiffrement)
• Une clé (de chiffrement) est une suite de caractères, plus ou moins longue, gardée se-
cret, qui permet de chiffrer ou déchiffrer un message
• Un caractère chr() est représenté par un nombre, appelé Unicode, qui l’identifie de
manière unique ; à l’inverse, la fonction ord() renvoie le nombre représentant l’unicode
d’un caractère spécifique. Par exemple :
print(f"Lettre {chr(97)} <=> Unicode {ord(’a’)}") # Lettre a <=> Unicode 97
print(f"Lettre {chr(65)} <=> Unicode {ord(’A’)}") # Lettre A <=> Unicode 65
Notons ici trois points importants : tout d’abord nous considérerons, assez naturellement, un
message comme une succession de mots, composés de lettres, ensuite, que, chaque opération
de chiffrement et déchiffrement s’effectue sur un seul caractère à la fois et enfin, que les lettres
sont différentes si elles sont écrites en majuscules ou minuscules. Les chiffrements symétriques
(César, Vigenère) présentés ci-dessous sont aujourd’hui obsolètes, il n’est donc absolument
pas recommandé de l’utiliser pour des communications sécurisées, mais servent de basent à
la compréhension des concepts asymétriques !
Fonction de chiffrement
Par exemple, le message chat", devient, avec un décalage de trois lettres, le code fkdw.
def cesar(msg, decal):
txt = "" # Initialise le texte du message
for char in msg: # Parcours chaque caractere
code = ord(char) - 97 + decal # ord(’a’) = 97, donc a devient 0 + decal
txt += chr(code % 26 + 97) # Convertir l’Unicode en lettre
return txt # Rappel: % = modulo, soit le reste; expl
# ord(’y’) - 97 + 3 = 27, 27 % 26 = 1 (b)
m, d = "chat", 3 # [ m, d = "fkdw", -3 ]
print(cesar(m, d)) # ^ POUR DECRYPTER ^
7.5. CRYPTOGRAPHIE 117
Explications
1. On choisit
— un message à chiffrer, par exemple hello
— une clé pour le chiffrement, par exemple key que l’on répète autant de fois que né-
cessaire pour qu’elle couvre toute la longueur du message, ici keyke
2. Chaque lettre du message en clair est décalée selon la lettre de la clé à la position corres-
pondante. Pour mémoire, la 1e lettre de l’alphabet est en position 0 [ord(char) - 97].
— h +10 car k est la 11e lettre => r
— e. +4 car e est la. 5e lettre => i
— l +24 car y est la 25e lettre => j
— l +10 car k est la 11e lettre => v
— o. +4 car e est la. 5e lettre => s
Fonction de chiffrement
f ( x) = ax + b
où x est la position de la lettre dans l’alphabet (indépendament de l’unicode, a=0, b=1, ..., z=25)
et a et b sont des nombres entiers choisis comme clé de chiffrement. Le chiffrement par déca-
lage étant un cas particulier où a = 1 et b = le décalage.
118 CHAPITRE 7. POUR ALLER PLUS LOIN
Exemple
Fonction de chiffrement
Pour bien comprendre la cryptgraphie, il faut saisir que, si on vous demande combien font
5 x 7, vous répondez aisément, 35. Qu’à l’inverse, si on vous demande de factoriser 35 vous
pouvez aussi assez aisément répondre 5 × 7. Ces deux questions ne sont pas cependant pas
du même ordre de difficulté ! Si on vous demandais de factoriser 1591, vous allez devoir effec-
tuer plusieurs tentatives pour résoudre le problème, alors que si l’on vous avais directement
dit d’effectuer le calcul de 37 x 43, cela n’aurait a priori pas posé de problème.
En d’autres termes, étant donnée une fonction f, il est assez facile, connaissant x, de calculer
f(x). Mais l’inverse, n’est pas si facile (si la fonction n’est pas bijective)... en effet, connaitre
7.5. CRYPTOGRAPHIE 119
le résultat de f(x) ne permet pas de connaitre aisément x (parfois même avec des supercalcu-
lateurs) ! A noter aussi que le chiffrement symétrique est beaucoup plus rapide / aisé que le
chiffrement asymétrique, mais a l’inconvénient de nécessiter de partager une clé sensée être
privée et secrète...
Au lieu de stocker un mot de passe directement, on stockera son hash. Par exemple secret123
donnera, à l’aide la la fonction SHA-256...
import hashlib
pwd = "secret123"
ash = hashlib.sha256([Link]()).hexdigest()
7.5.5 À retenir
— Définitions de la cryptographie et du vocabulaire associé
— Utiliser de manière débranchée les chiffrements de César et Vigenère
— À l’aide de Python, utiliser le chiffrement de César
— Attaquer un mot de passe par "force brute" (TP05 p. 172)
Annexe A
EXERCICES
Pour le rendu d’exercices, se référer aux instructions données en notes de bas de page, p. 57.
ex1 QCM
120
A.1. LES SYSTÈMES INFORMATIQUES 121
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
ex3 Comparaison Compléter le tableau suivant en indiquant pour chaque système d’exploi-
tation (SE / OS) un avantage ou une caractéristique notable.
Caractéristique / Avantage
Windows
macOS
Linux
Android
iOS
ex4 Étude de cas Un ami souhaite acheter un nouvel ordinateur portable. Il hésite entre un
modèle sous Windows 11, un MacBook (macOS) et un ordinateur sous Linux Ubuntu.
i) Indiquer deux critères qu’il doit considérer pour choisir son système d’exploitation
ii) Donner un exemple de situation où a) Linux et b) Windows est préférable
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
122 ANNEXE A. EXERCICES
ex1 QCM
i) Quel format est le plus adapté pour un document qui doit être imprimé et conservé
sans modification ?
⃝ .docx ⃝ .jpg ⃝ .pdf ⃝ .txt ⃝ .xls
ii) Quels formats sont utilisés pour stocker des images compressées ?
□ .bmp □ .gif □ .jpg □ .png □ .txt
iii) Quel format est non compressé et génère donc des fichiers lourds ?
⃝ .bmp ⃝ .docx ⃝ .jpg ⃝ .mp3 ⃝ .png
iv) Parmi les formats ci-dessous, lesquels sont utilisés pour des présentations assistées
par ordinateur ?
□ .docx □ .jpg □ .odp □ .pdf □ .pptx
ex2 Type de fichier Indiquer, pour chaque extension, le type de fichier et donner deux logi-
ciels qui permet de l’ouvrir.
.docx
.png
.mp4
.xlsx
ex3 Étude de cas Un étudiant doit envoyer un rapport de 20 pages avec images par cour-
riel. Il hésite entre les formats suivants : .docx, .pdf, .jpeg.
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
A.1. LES SYSTÈMES INFORMATIQUES 123
i) Ouvrir MS Word
ii) Copier/coller du web, un texte d’environ une page, incluant deux ou trois images et
différentes mises en forme (gras, listes à puces, etc.)
v) Ouvrir chaque fichier avec différents programmes (Adobe Acrobat Reader, MS Word,
LibreOffice Writer, Bloc-notes, mais aussi Google Docs) pour vérifier la compatibilité
et le fonctionnement de ces outils
Production attendue : Quatre fichiers et une brève note décrivant les différences ob-
servées en termes de qualité, de taille et de mise en forme entre chaque format.
ii) Importer ou créer une image contenant des éléments avec transparence
Production attendue : Une image par format et une brève note décrivant les différences
constatées en termes de qualité et de taille.
ex1 Organiser son dossier personnel et rendre les fichiers selon les consignes suivante...
— A_Donnees
— B_Documents
— C_Programmation
— D_Reseaux
— E_MesProjets
vi) Dans une autre fenêtre, ouvrir son dossier personnel (sous PC)
ix) Ouvrir le fichier avec Microsoft Word, modifier ce qui est demandé, enregistrer, puis
fermer le fichier (Ctrl + W)
xi) Pour l’exercice spécifique de rendu sur Moodle, effectuer les trois dernières opéra-
tions ci-dessus avec le fichier Ex_Moodle.docx
— Cours [Link]
MaisonQuartier
Administration
Comptabilité
Employés
Cours_Ateliers
Multi-sports
Poterie
Manifestations
Fête de quartier
Halloween
A.1. LES SYSTÈMES INFORMATIQUES 125
iv) Trier tous les fichiers dans les bons dossiers d’après leur nom et les indications ci-
après :
— Les fichiers Compta fête de [Link] et Compta [Link]
doivent figurer (par un lien) dans le dossier Comptabilité ET dans les dos-
siers des manifestations correspondantes
— Créer un nouveau fichier Word nommé tour de [Link] et le placer
dans Cours_Ateliers/Poterie
v) Compresser le dossier (le zipper) en lui donnant un nom adéquate, puis, selon les
insctructions de votre votre enseignant·e / formateurice, le rendre !
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
ex5 QCM
ex1 Ouvrir le gestionnaire des tâches (ou la config. système sous Linux/macOS) et noter :
— Le nom du processeur (CPU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
— La quantité de mémoire vive (RAM) installée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
— L’espace libre sur le disque dur local et sur les disques réseaux . . . . . . . . . . . . . . . . . . . . . .
........................................................................................
ex2 Identifier, depuis l’explorateur de fichiers ou via les préférences système, le type de carte
graphique (GPU) utilisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
ex3 Relever au moins deux périphériques connectés (externe ou intégré) et préciser leur rôle
.............................................................................................
.............................................................................................
.............................................................................................
ex4 Rédiger une courte synthèse (5–6 lignes) présentant les forces et limites de la configura-
tion observée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
ex5 Imaginer, sur la base de ce qui précède...
i) La configuration d’un ordinateur idéal pour les études, en justifiant ses choix (pro-
cesseur, RAM, stockage, carte graphique, périphériques) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
........................................................................................
ii) Fournir un lien (avec les coordonnées du vendeur) pour facillement effectuer l’achat
........................................................................................
........................................................................................
A.1. LES SYSTÈMES INFORMATIQUES 129
ex1 Ouvrir l’invite de commande (cmd) et afficher la configuration réseau de votre machine
(commande ipconfig sous Windows ou ifconfig sous Linux/macOS). Noter son adresse
réseau par défault et expliquer les différences entre une adresse IP qui commence par
10.134..., 127.0... et une autre qui commence par 255.255... ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
ex2 Identifier et compléter vos connaissances sur les composants des systèmes informatiques
(CPU, etc.), le rôle des switch, routeurs, câbles et points d’accès WiFi
ex3 Sur la base des élément suivants, rédiger un schéma (page 132) montrant la connexion
de votre poste au réseau local et à Internet.
Nom de l’hôte : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Système d’exploitation : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Organisation ou propriétaire du réseau : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Date de la dernière installation système : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nom et type du processeur utilisé : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Options régionales appliquées : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mémoire totale du disque dur (en Go) : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Domaine (DNS) : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ex1 Ouvrir l’invite de commande (cmd) et exécuter un ping vers l’adresse IP trouvée précé-
dement. Noter le résultat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
ex2 Toujours dans l’invite de commande, exécuter un ping, mais cette fois vers un site ex-
terne (par expl. [Link]). Noter et expliquer ce qui se passe. . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
.............................................................................................
ex3 Rappeler, en une phrase, le rôle d’un DNS dans l’accès aux sites web. Puis utiliser la com-
mande nslookup avec votre adresse IP. Qu’y a-t-il de nouveau ? . . . . . . . . . . . . . . . . . . . . . . . .
.............................................................................................
ex4 Demander à un·e camarade son adresse IP. Exécuter un ping vers cette adresse et ob-
server le résultat. Quelle différence / similitude y’a-t-il avec l’exercice précédent ? . . . . . . . .
.............................................................................................
130 ANNEXE A. EXERCICES
ex3 QCM
ii) Lequel de ces protocoles est utilisé pour transférer des pages web ?
⃝ DHCP ⃝ DNS ⃝ FTP ⃝ HTTP ⃝ SMTP
A.1. LES SYSTÈMES INFORMATIQUES 131
iii) Quelle est la principale différence entre un réseau câblé et un réseau sans fil ?
⃝ Le câblé est plus rapide (à capa- ⃝ Le sans fil ne permet pas (encore)
cité égale) d’accéder à Internet
⃝ Le câblé utilise des câbles, le sans ⃝ Le sans fil ne peut pas connecter
fil utilise des ondes radio plus de 3 appareils
⃝ Le sans fil est gratuit
Commence par définir, la question ou le problème posé ; fournit ensuite, les trois ou quatre élé-
ments qui définissent les spécifications tel que définies dans le chapitre de théorie spécifié ci-
dessus (à droite).
iii) Afficher la valeur de la variable re- ii) Avec une interface améliorée
ponse — idem que précédement, mais ...
— Si la réponse < 1, demander un
chiffre plus grand et retourner
au premier point
ex2 Un bonjour personnalisé
— Si la réponse > 6, demander un
chiffre plus petit et retourner
i) Demander à l’utilisateur son pré- au premier point
nom en affichant "Quel est ton pré- — Sinon, remercier l’utilisateur
nom ? " et lui rappeler le nombre four-
nit
ii) Stocker la valeur de la reponse
ex4 On calcule !
dans une variable
i) Une fois, hein...
— Poser la question "Donne-moi
iii) Demander le nom de famille (sto-
s’il te plait un nombre"
cké dans une autre variable)
— Enregistrer la réponse
Réprésente les processus suivants sous forme d’ordinogramme, puis, pour chaque exercice, écrit
l’algorithme linéaire correspondant.
ex1 Demander successivement 10 nombres à un utilisateur, et lui dire ensuite quel était le
plus grand nombre parmi les réponses (exemple : réponse 1 = 12, réponse 2 = 14, etc. le
plus grand nombre étant le 14).
ex2 Afficher de surcroît en quelle position ce nombre a été saisie ce nombre (ci dessus en deuxième
position)
ex3 Cela change-t-il quelque chose si on ne connaît pas d’avance combien l’utilisateur sou-
haite saisir de nombres ? Détailler votre réponse.
A.2. NOTIONS D’ALGORITHMIQUE 135
Représente les processus sous forme d’ordinogramme puis d’algorithme linéaire afin d’indi-
quer comment dessiner un arbre de Noël – d’une grandeur définie dans un premier temps, puis
en demandant ensuite la taille du sapin à un utilisateur (5 pour le sapin ci-dessous). Vérifier
bien (éventuellement avec un ou une camarade) que vos processus et algorithmes fonctionnent.
*
***
*****
*******
*********
|
136 ANNEXE A. EXERCICES
Pour le deux TP suivants, rédiger d’un part l’algorithme linéaire (si vu en cours) et, d’autre
part, le code à exécuter. Pour la reddition, se référer aux instructions p. 57.
Bases_TP01. Afficher des valeurs et des variables Théorie p. 41, aide-mémoire p. 175
ex1 Écrire un programme qui affiche "Bon- ex3 Multiplier ? Écrire un programme qui :
jour !" à l’écran.
i) donne la valeur 10 à la variable
ex2 2 variables ? Écrire un programme
nombre
qui :
i) donne la valeur 5 à la variable a ii) donne la valeur 3 à la variable fac-
ii) donne la valeur 20 + 45 à b teur
Soit le code ci-dessous. Sur cette base, compléter le code pour réaliser les exercices suivant.
vi) Combien de variables sont utilisées dans le programme suivant et que vaut la va-
riable a une foix cette séquence d’opérations terminée ?
a = 8, b = 3
a = a - 4
b = 2 * b
a = a + b
viii) Écrire un programme qui demande à l’utilisateur, son prénom, son nom et son âge et
qui revoit "Bonjour je m’appelle votrePrenom votreNom, j’ai votreAge ans".
ex2 Affichage print avancé
i) Modifier les insctructions 2 et 3 d’un des programme précédent pour qu’il affiche ton
âge en 2030
ii) Corriger les programmes suivants :
— Programme a
monAge = tonAge + 1
tonAge = 15
print(monAge)
— Programme b... le nombre de frere (f) et soeur (s) n’est pas correct !
A.3. CONCEPTS GÉNÉRAUX 139
f = 2
s = 1
print("Nombre freres et soeur:", f + f)
— Programme c
age=input("Quel est ton age? ")
print("L’an prochain, tu auras ",age+1, " ans")
— Programme d
x = input("Donner un entier ")
y = input("Donner un autre entier ")
print("la somme de", x, "et", y, "vaut", x + y)
— Programme e
print("je suis sense calculer la moyenne de deux notes...")
moyenne = 5 + 4 / 2
print(moyenne)
ex1 Affiche trois fois le mot "Youpi" en utilisant seulement deux lignes de code !
ex2 Encore plus for... Affiche :
i) Tous les nombres de 1 à 100 avec le même nombre de lignes de code
ii) Avec une ligne de code supplémentaire, demande cette fois-ci à un utilisateur de fixer
la limite
ex3 Dessine un motif en demandant à l’utilisateur :
i) Un motif à répéter (comme par exemple _.-’-)
ii) Le nombre de répétion horisontales et verticales
ex1 Écrit un programme qui demande à l’utilisateur : Qu’est-ce qu’on dit?. La ques-
tion sera répétée tant que l’utilisateur n’aura pas répondu soit merci, soit Merci. Le
programme ajoutera ensuite Aahh... quand même!.
ex2 Demande à l’utilisateur :
i) S’il veut tourner à droite (d) ou gauche (g) et le demander tant que le choix
n’est pas gauche
ii) Afficher Tu as tourné à... suivi du choix effectué
iii) Répéter la question tant que le choix n’est ni d, ni g
ex3 Décompte les sauts de deux-cents moutons à l’aide d’une variable compteur et d’une
boucle while
Créer une histoire interactive, sous Python et juste avec du texte, où l’utilisateur agit en choi-
sissant une action à effectuer parmi des choix donnés par la machine (vous choisissez le lieu
de l’histoire, le scénario, la manière de gagner ou de perdre).
/ !\ bien suivre les contraintes et consignes.
Contraintes (Pré-conditions)
nbEpee = 0
print("Tu es a Paris")
print("Tu trouves une epee par terre.")
if choix == "R":
print("Tu as ramasse l’epee.")
nbEpee = nbEpee + 1
else:
print("Tu ne la ramasses pas.")
Régle générale A : être capable d’expliquer le code produit fait partie intégrante de l’éva-
luation ; en particulier, si un·e élève plagie du code (c’est à dire sans mentionner ses sources),
son évaluation ne pourra pas être réalisée ( !). L’élève qui, en outre, ne peut pas expliquer son
fonctionnement (du code), n’obtiendra au mieux et en conséquence, pas plus que la moyenne.
À noter par ailleurs, que si tous le groupe sait expliquer le fonctionnement du code, un bonus
de 10% pourra être accordé.
142 ANNEXE A. EXERCICES
Créer un document de définition du jeu qui contient (sous traitement de texte, tableur ou logi-
ciele de présentation par ordinateur, selon consignes orales données par l’enseignant) :
— Le nom et la classe des deux personnes qui travaillent sur le projet
— Le titre de l’histoire ou du jeu
— Dans quelle ambiance l’histoire se passe (présent, futuriste, médiéval, farwest, mytholo-
gique, abstrait, etc)
— Un scénario qui contiendra les trois éléments suivants :
Le fils rouge de l’histoire
> Scène 1 : le joueur est à tel endroit. Il peut soit faire ça, soit faire ça.
> Scène 2 : le joueur est arrivé à tel endroit. Il peut soit faire ça, soit faire ça, soit faire
ça. > Scène finale : le joueur est arrivé à tel endroit. Il peut soit faire ça, soit faire ça.
Conditions de victoire (Post-conditions)
Le joueur gagne, par exemple, soit s’il a une clé et qu’il choisit d’ouvrir le coffre, soit s’il a
plus de 50 points de vie et choisit de porter le coffre jusqu’au chef. Dans les autres cas il
perd, le joueur doit savoir s’il a gagné ou s’il a perdu
Variables du jeu (exemple)
> Vie (varVie = 100 # au début)
> Clé (varCle = 0 # au début)
Régle générale B : un code (partie 2 et 3) qui ne respecte pas scrupuleusement les spécifi-
cations établie (lors de la partie 1), est, par définition hors sujet ; le travail réalisé (et donc la
note) ne pourra, dès lors, pas être considérée comme suffisant.
144 ANNEXE A. EXERCICES
ex1 Pour s’entraîner à la gestion de listes (de courses), effectue les étapes suivantes :
— Créer une liste vide nommée listeCourses
— Ajouter cinq éléments à la liste (un par un) à l’aide de la fonction append()
— Afficher le nombre d’éléments dans la liste à l’aide de la fonction len()
— Utiliser une boucle for et la fonction print() pour afficher chaque élément de la
liste précédé d’un tiret
— Supprimer l’un des éléments de la liste à l’aide de la fonction remove()
— Vérifier le nombre d’éléments de la liste
— Modifier le programme pour afficher chaque élément de la liste avec son index (0, 1,
2, 3...)
ex2 Gère les séries comme sur Netflix ;)
— Créer une liste de séries
— Demander à l’utilisateur de saisir un nom de série à chercher et utiliser une variable
(par exemple varRechercher) pour stocker la valeur fournie
— Vérifier si la série demandée se trouve dans la liste des séries à l’aide de la fonction
in et du contrôle if
— Afficher un message indiquant si la série est dans la liste ou non (afficher le nom de
la série saisie et le message d’information)
ex1 Révision
Créer un fichier mes_animaux.txt
ÉléphantZèbré
Pangouin
*Serpent à plumes
Chat-poisson
Kangourou volant
*Girafe-licorne
*Tortue-lumineuse
Poule multicolore
Écureuil-sauterelle
*Chauve-souris étoilée
ex2 Créer une image en noir et blanc avec une matrice et l’afficher à l’aide de boucles. Pour
cela, utiliser :
A.3. CONCEPTS GÉNÉRAUX 147
image = [
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 1, 1, 0],
[0, 1, 1, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]
]
i) Calculer le nombre total de places réservées (somme des 1) et afficher les numéros
de rangées contenant au moins 5 sièges disponibles
ii) Modifier le tableau pour ajouter une 6ème rangée où tous les sièges sont libres (tous
0), et afficher le nouveau tableau
A.4.1 Matplotlib
À venir...
150 ANNEXE A. EXERCICES
Voir Bases_TP03 p. 137 sur les jeux de hasard avec les boucles au conditionnel.
A.4.3 Turtle
Turtle_TP01. Déplacer une tortue Théorie p. 69, aide-mémoire p. 176
Dans ces exercices, tu peux utiliser l’instruction back() permettant de faire faire un demi-
tour à la tortue.
ex3 Voici un jeu pour enfants nommé "Maison de Nicolas" : le but est de la
dessiner sans lever le crayon avec exactement 8 segments droits sans
repasser deux fois sur un même segment.
ex4 Dessine un hexagone régulier et assure-toi que
chaque côté à une couleur différente.
ex5 Dessine un feu de circulation. Tu peux aussi dessiner, un rectangle
noir avec un crayon de largeur 80 et les cercles avec dot(40)...
ex3 Dessine une belle étoile en utilisant les angles de 140° et 80°.
Turtle_TP04. Variable
ex1 Développer un programme qui demande à l’utilisateur un nombre entier n et qui dessine
ensuite un polygone régulier à n côtés avec la tortue. Par exemple, si l’utilisateur saisit
le nombre 8, il faut dessiner un polygone régulier à 8 côtés (un octogone). Le programme
doit calculer l’angle de rotation approprié après chaque segment droit.
ex3 Lire le côté du plus grand carré depuis une boîte de dialogue.
Dessiner ensuite 20 carrés dont le côté du carré suivant diminue
toujours d’un facteur 0.9 par rapport au côté du carré précédent
et qui effectue une rotation de 10 degrés.
ex1 Demander à l’utilisateur de saisir la longueur du côté du carré à dessiner. Si elle est in-
férieure à 50, dessiner un carré rouge de la taille correspondante. Sinon, dessiner un carré
vert de la taille indiquée.
ex3 Pour aller plus loin... Dessinez un arbre qui ressemble presque
à un arbre réaliste. Dans ce but, définir une fonction arbreFrac-
tal(t) dont la branche mesure t construit de la manière suivante :
A.4.4 Pygame
Pygame_TP01. Bases de la programmation orientée objet
ex1 Créer sa propre image de fond à l’aide d’un éditeur d’images puis l’ajouter au dossier Images,
lui-même présent dans le même dossier que vos scripts Python. À l’aide de recherches
sur Internet, inclure cette image comme fond d’écran d’un jeu.
ex2 Ajouter une barre de statut de 30 pixels de haut qui donne le nombre de ballons qui ont
malgré tout atterri.
ex1 Les balles ou ballons, une fois atterris, ne devraient pas disparaître mais être rempla-
cés par une forme différente et immobile ; un petit carré bleue fera par exemple très bien
l’affaire.
ex2 Les objets qui ont atterris communiquent aux entrants leur position d’atterrissage de
sorte que les futurs ballons ne tombent pas dans un espace déjà occupé. Une fois que toutes
la base (organisée par colonnes) est complète, le jeu se termine avec le message "Game
Over".
A.5. SITES WEB 155
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="author" content="Prenom NOM">
<meta name="description" content="Page metadonnees">
<meta name="keywords" content="web, metadonnees, exercice">
<title>META</title>
</head>
<body>
<h1>Bienvenue</h1>
<p>Ceci est une page exemple.</p>
</body>
</html>
i) Télécharger une photo libre de droit et afficher ses informations EXIF. Noter trois
métadonnées trouvées
1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ii) Pourquoi des métadonnées pourraient-elles poser un problème de confidentialité ?
........................................................................................
iii) Donner un exemple de métadonnées utiles pour :
– un photographe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
– un site de voyage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
– un réseau social . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iv) Rechercher comment supprimer ou modifier les métadonnées d’une image. Indiquer
l’outil utilisé et comment vous avez fait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
........................................................................................
........................................................................................
........................................................................................
## Centres d’intérêt
### Liste
- Programmation créative
- Graphisme et mise en page
- Sport & montagne
### Tableau
| Compétence | Niveau |
|----------------|---------------|
| Markdown | Intermédiaire |
| Python | Avancé |
| Organisation | Débutant |
### Code
‘‘‘python
# Affichage
prenom = "Antoine"
print(f"Bonjour, {prenom} !")
### Tâches
- [x] Rédaction
- [ ] Relecture
### Divers
 Ajouter le commentaire sur la première ligne et enregistrer le fichier dans son réper-
toire personnel (<!- ... - Modifier _ TP03ex2 ->)
ii) Ouvrir la page [Link] et copier / coller le script html
(boutton droit / Afficher le code)
iii) Rechercher, ajouter ou modifier
— le titre principal <h1>, remplacer par "Copie Mozilla"
— remplacer le contenu de la balise <title> par TEST
iv) Ouvrir le fichier enregistré dans un navigateur web
v) Constater les changements dans un navigateur web
Notes : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
..................................................................................................
..................................................................................................
..................................................................................................
160 ANNEXE A. EXERCICES
<!DOCTYPE html>
<html>
<head>
<title>PAGE</title>
</head>
<body>
<h1>Titre</h1>
<p>Ceci est un paragraphe.</p>
<a href="[Link] vers EDUGe</a>
</body>
</html>
<table border="1">
<tr><th>Balise</th><th>Utilite</th></tr>
<tr><td>h1</td><td>Titre principal</td></tr>
<tr><td>p</td><td>Paragraphe</td></tr>
</table>
Web_TP05. Contenus
i) Texte et listes
— Reprendre la structure minimale HTML
(<!DOCTYPE>, <html>, <head>, <title>, <body>).
— Modifier l’en-tête
<!- Prénom / Web - Contenus - Textes _TP05ex1i ->
— Dans le <body> insérer :
— un titre principal <h1> Page de contenu
— un sous-titre <h2> : Introduction
— deux paragraphes <p> avec texte libre
— une liste non ordonnée <ul> avec 2 éléments <li>
— une liste ordonnée <ol> avec 3 éléments <li>
— Enregistrer et afficher la page dans un navigateur.
ii) Images et média
<style>
body { background-color: #f0f0f0; }
h1 { color: blue; text-align: center; }
p { color: #333333; font-family: Arial, sans-serif; }
</style>
i) Lier la page avec une feuille de style externe et modifier les mises en forme
— un titre <h1>
— un sous-titre <h2>
— deux paragraphes <p>
— une image locale ou distante
iv) Enregistrer et tester votre page en vérifiant que le style s’applique à tous les élé-
ments
ex2 Paramètres
— Sous Paramètres, donner les détails liés au site (nom d’école, adresse, etc.)
— Ajouter un ou une camarade à votre base de données
— Régler la langue (français) et la devise (CHF)
— Ajouter les trois modules : Site Web, Facturation, Comptabilité
Note : chaque module est une application ajoutée à votre base de données
i) Choisir un thème
— Ouvrir le module Site Web
— Choisir un nouveau thème
ii) Pages principales
— Accueil Brève description de l’exercice
— À propos Page vous présentant (utiliser éventuellement l’exercice Markdown)
— Contact Formulaire (message)
Note : pour modifier les pages, utiliser l’éditeur visuel (glisser-déposer).
Note : dans une démarche Agile, vérifier avec vos camarades que le site est bien visible !
ex2 Présentation
La boxe : présentation
La boxe est un sport de combat où deux adversaires s’affrontent dans un ring, en utili-
sant uniquement leurs poings, protégés par des gants rembourrés. Reconnue pour sa dis-
cipline exigeante et son intensité physique, la boxe repose sur la maîtrise des techniques
de frappe, la défense et l’endurance. Au-delà de la simple confrontation physique, la boxe
met en avant des valeurs de respect, de contrôle de soi et de résilience. Chaque combat
est une démonstration de stratégie et de détermination. Pratiquée depuis des siècles, la
boxe est aujourd’hui l’un des sports les plus populaires et compte des compétitions pres-
tigieuses à travers le monde, de l’amateur au professionnel.
Les groupes
Une photo (boxeurs participants aux compétitions) avec la légende
Photo : [Link]
ex3 Contact
Boxing Club
Route de la Boxe 24, 1227 Carouge
+41 22 725 2424
contact@[Link]
Entraîneurs
— Nicolas de Vitivier
— Florian Fortich
— Antoine Matleau
Présidente du club
Véronique Embrasslair
ex4 Pied-de-page
— Adresse à gauche
— Lien vers la page de contact à droite
— En dessous : ajouter un lien vers la Fédération suisse de boxe
([Link]
A.6. BASES DE DONNÉES 167
Une association / club de sport souhaite gérer l’inscription de ses membres et l’organisation
des cours proposés par différents entraîneurs. Les contraintes sont les suivantes :
ex1 Identifier les quatres entités et les relier aux attributs ci-dessous. En déduire le MCD.
Id, Nom, Courriel, Date_Naissance | Id, Nom | Id, Nom_Cours, Heure
La bibliothèque de l’école souhaite mettre en place un système informatique pour gérer les livres,
les emprunts et les personnes qui empruntent des livres pour SoL. Travailler en binôme pour
concevoir un modèle conceptuel et logique pour ce faire. Les contraintes sont les suivantes :
i) Un livre est identifié par son titre, son auteur, son ISBN, et sa catégorie (fiction, non-
fiction, etc.)
ii) Un abonné est identifié par son numéro d’abonné, son nom, et son adresse
iv) Un abonné peut emprunter plusieurs livres, mais un livre ne peut pas être emprunté par
plusieurs abonnés en même temps
ex1 Identifier les entités (livres, personnes , emprunts, ...) et définir leurs attributs
ex2 À l’aide des contraintes, déterminer les relations entre les entités
ex3 Transformer le modèle conceptuel en tables E/R (entités / relations ou MLD) avec...
Un restaurant souhaite gérer ses commandes de repas et menus. Le système doit permettre de
suivre les commandes des clients, les plats du menu, et les employés qui préparent ces plats.
Les contraintes sont les suivantes :
i) Un client est identifié par un numéro de commande, son nom, et son numéro de table
ii) Un plat est identifié par son nom, son prix, et sa catégorie (entrée, plat principal, des-
sert)
iii) Une commande est passée par un client et contient un ou plusieurs plats. La commande
est identifiée par son numéro et contient la date et l’heure de la commande
iv) Un plat est préparé par un employé de cuisine, et chaque employé est identifié par son
numéro d’employé et son nom
v) Un client peut commander plusieurs plats, mais chaque plat appartient à une seule com-
mande
En vous basant sur le code donné dans la théorie, et en cherchant les formules sur le web,
créer des applications qui permettent de ...
A.7.2 Cryptographie
Crypto_TP01. Notions Théorie p. 116, aide-mémoire p. 177
ex1 Comprendre Soit le message python et la clé code, appliquer le chiffrement de Vige-
nère en suivant les étapes suivantes :
ex3 Déchiffrer Étant donné le message chiffré lvyfs et la clé key, appliquer le déchiffre-
ment en :
ex4 Programme de déchiffrement Modifier le programme ex2 pour ajouter une option de
déchiffrement :
ii) L’algorithme doit fonctionner pour récupérer le message original à partir du texte
chiffré
ex5 Ça dégénère Un espion a intercepté un message chiffré dsn-xmz sans connaître la clé.
Cependant, il sait que la clé est un mot anglais de trois lettres... Proposition de méthode
de résolution :
i) Créer un programme qui teste toutes les combinaisons possibles de clés de trois lettre
alphabet = string.ascii_lowercase # abcdefghijklmnopqrstuvwxyz
print(cles_possibles[:10]) # Afficher dix cles pour verification
ii) Vérifier si le texte obtenu contient un des mots français ou anglais de six lettres
francais = {"bal-bal", "bon-bon"}
anglais = {"big-big", "top-top"}
172 ANNEXE A. EXERCICES
ex1 PIN et sapin Tester toutes les combinaisons possibles de 0000 à 9999.
i) Combien de temps met-on pour passer en revue toute les combinaisons ?
ii) Et pour découvrir le code 1228 ?
ex2 Mot de passe avec dictionnaire
i) Un ingrédient secret, en six lettres, a été chiffré avec un chiffrement de César. Com-
plétez le programme pour tester tous les décalages et vérifier si un mot du diction-
naire est retrouvé pour l’ingrédient codé (exemple avec zywwo).
ingredients = ["oignon", "pomme", "tomate", "piment", "amande"]
ii) Un site utilise des mots de passe à quatre lettres uniquement en minuscule (ex : abcd)
i) Écrire un script qui essaie toutes les combinaisons possibles pour retrouver un
mot de passe (exemple avec vent)
ii) Optimiser l’algorithme pour ne tester que les mots présents dans un dictionnaire
mdp = [
"chat", "pain", "vent", "noir", "bleu", "jour", "nuit", "ciel",
"rose", "bain", "gris", "faux", "loin", "plus"
]
ex3 Bonus Un espion a intercepté un message codé mais ne sait pas s’il a été chiffré avec
César, Vigenère ou par transformation affine. Écrire un script qui analyse les fréquences
de lettres de l’alphabet et essaye d’identifier le type de chiffrement utilisé.
Dbapi_TP
À venir...
Request_HTMLParser_TP
À venir...
Annexe B
FICHES DE RÉVISIONS
174
PYTHON
Répétitions for (boucles basiques) Théorie p. 47, 51 et 70, exercices p. 140 et 150
for _ in range(1,n,p): # Boucle de 1 jusque n, pas p
print("no =", _) # Affiche la valeur du compteur
’’’’’’
for _ in range(n): # Boucle standard (de 0 jusqu’a n) / carre si n
= 4
[Link](100) # Voir module de dessin Turtle ci-apres
[Link](360/n) # /! Indentation
Modules basiques
While / Tant que (boucles avancées) Théorie p. 51 et 73, exercices p. 140 et 152
i = 0 # Definit la valeur du compteur
while True: # Definit une boucle, possible tant que
print("i =", i) # Ecrit la valeur du compteur
if i == 10: break # Sort du programme avec break
else: i = i + 1 # Ajouter un a la variable i (idem: i += 1)
’’’’’’
rep = "" # Annoncer la varaiable
while rep != reponse: # Tant que ..., <, >, <=, >=, == ou !=
rep = input(question) # Poser une question
Modules avancés
# Balises semantiques
<main></main> # Contenu principal de la page
<div></div> # Conteneur specifique
<span></span> # Conteneur d’une partie de ligne
<table></table> # Tableau lignes <tr></tr> et colonnes <td></td>
<img src="" alt=""> # Image avec attributs source et alternative
# Exemple avec formulaire et divers champs (text, email, password, submit, ...)
<form action="" method="post">
<label for="nom">Nom</label>
<input type="text" id="nom" name="nom" required><br>
<textarea id="msg" name="msg" rows="4" cols="50"></textarea>
<input type="submit" value="Envoyer">
</form>
fichiers . 58
Glossaire fonctions Regroupement d’un ensemble
d’instructions susceptible d’être utilisé
plusieurs fois dans un programme. 54,
algorithme Méthode permettant de ré- 71, 144
soudre un problème de manière sys- for Répéter des instructions pour chaque
tématique. 25 élément d’une liste, d’un tuple, ou de
arrondir . 40 tout objet itérable. 39, 70, 140
181
182 Glossaire
[Arnold et al., 2022] A RNOLD, J., K OHN, T. et P LÜSS, A. (2022). Concepts en programma-
tion en Python avec la plateforme TigerJython. [Link]
franz.
[Bonjour, 2021] B ONJOUR, J.-D. (2021). Introduction à la programmation en Python. https:
//[Link]/cours/.
[Jouët, 1991] J OUËT, J. (1991). Technologies de communication. Rapport technique, Organi-
sation des Nations Unies pour l’éducation, la science et la culture (UNESCO). ISBN 92-3-
202678-1.
[Python Software Foundation, 2025] P YTHON S OFTWARE F OUNDATION (2025). Documenta-
tion Python 3.13. [Link]
[Solnon, 2007] S OLNON, C. (2007). Support de cours d’algo. [Link]
[Link]/csolnon/.
[Swinnen, 2012] S WINNEN, G. (2012). Apprendre à programmer avec Python. Eyrolles, Paris,
3e éd édition. ISBN 22-1-213434-6.
Environnements de développement
183
184 BIBLIOGRAPHIE
Icônes et emojis
— EmojiDB
— Font Awesome
— Google Fonts
— W3Schools (recherches Font Awesome, Google, Bootstrap)
Couleurs
— HTML Color Picker
Expressions
— Regex Generator (Générateur d’expressions)
Table des figures
185
Liste des tableaux
186
Liste des codes
187
Table des matières
INTRODUCTION v
2 NOTIONS D’ALGORITHMIQUE 25
2.1 Introduction à l’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.1 Notion d’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Démarche pour la résolution d’un problème . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1 Analyse de problèmes et décomposition . . . . . . . . . . . . . . . . . . . . . 26
2.2.2 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.3 Application de l’algorithmique à la programmations (résumé) . . . . . . . . 28
2.2.4 Représentations algorithmiques . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.5 Exemple complet d’algorithmique : recherche de dossiers . . . . . . . . . . 32
2.3 Quelques bonnes pratiques de programmation . . . . . . . . . . . . . . . . . . . . . 35
188
TABLE DES MATIÈRES 189
6 BASES DE DONNÉES 90
6.1 Modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.1 Modélisation conceptuelle des données (MCD) . . . . . . . . . . . . . . . . . 91
6.1.2 Modèle logique (MLD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.1.3 Modèle physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.2 Language SQL et systèmes de gestion des bases de données (SGBD) . . . . . . . . 96
6.2.1 De la création à l’insertion de nouvelles données . . . . . . . . . . . . . . . . 96
6.2.2 De la lecture à la suppression de données . . . . . . . . . . . . . . . . . . . . 97
6.3 Gestion avancée des bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.3.1 Association d’informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.3.2 Utilisation des caractères spéciaux . . . . . . . . . . . . . . . . . . . . . . . . 100
6.3.3 Les regroupements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.3.4 Tri des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.4 Python et les bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4.1 De la connexion à l’insértion de nouvelles données . . . . . . . . . . . . . . 102
6.4.2 De la lecture à la modification de données . . . . . . . . . . . . . . . . . . . . 103
6.4.3 Clôture de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
TABLE DES MATIÈRES 191
6.5 Administration de SQLite à l’aide d’un système de gestion de base de données (SGBD)106
A EXERCICES 120
A.1 Les systèmes informatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
A.1.1 Softwares (logiciels) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
A.1.2 Hardware (la machine) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
A.1.3 Networks (réseaux) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
A.2 Notions d’algorithmique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
A.2.1 Introduction à l’algorithmique, étape par étape . . . . . . . . . . . . . . . . 133
A.2.2 Algorithme et démarche pour la résolution d’un problème . . . . . . . . . . 135
A.3 Concepts généraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
A.3.1 Acquérir des bases solides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
A.3.2 Bases et exécutions conditionnels... . . . . . . . . . . . . . . . . . . . . . . . . 137
A.3.3 Containers, contrôles et fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 140
A.3.4 Création d’une histoire interactive . . . . . . . . . . . . . . . . . . . . . . . . 141
A.4 Modules Python clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
A.4.1 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
A.4.2 Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
A.4.3 Turtle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
A.4.4 Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
A.5 Sites web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A.6 Bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
A.7 Devenir expert en programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
A.7.1 Modules spécifiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
192 TABLE DES MATIÈRES
RÉFÉRENCES 181
À propos
L’ECCG Aimée-Stitelmann, située à Plan-les-Ouates, à Genève, propose des formations de
l’École de Culture Générale (ECG) et de la filière professionnelle commerciale (EC). La coha-
bitation de formations généralistes dans les domaines socio-éducatifs, de la communication,
de l’information, et de la formation professionnelle commerciale y est une richesse tant pour
les enseignants que les apprenants.
Bases_TP01
(p. 136)
Bases_TP02
(p. 136)
Bases_TP03
(p. 137)
Bases_TP04
(p. 137)
Bases_TP05
(p. 138)
Bases_TP01
Bases_TP02
Bases_TP03
Bases_TP04
Containers, contrôles et fonctions (partie 1)
Création d’une histoire interactive
Containers, contrôles et fonctions (partie 2)
Turtle
Pygame
...
Sites web
Web_TP02
(p. 156)
Web_TP03
(p. 159)
...
...
...
CORRIGÉ
SYSTÈMES INFORMATIQUES
ex1 QCM
i) Format le plus adapté pour un document à conservé sans modification ? .pdf ; ii)
Images compressées ? .gif, .jpg, .png ; iii) Non compressé et donc fichiers lourds ?
.bmp ; iv) Présentations assistées par ordinateur ? .odp, .pdf, .pptx.
ex2 Type de fichier
.docx, document texte (Word), MS Word, LibreOffice Writer ou Google Docs ;
.png, image compressée (transparente), MS Photos, GIMP ou navigateur web ;
.mp4, vidéo, VLC Media Player ou Windows Media Player ; .xlsx, feuille de
calcul, MS Excel, LibreOffice Calc ou Google Sheets ; .pdf, document semi-figé /
protégé, Adobe Reader ou Foxit Reader.
ex3 Étude de cas
Formats adaptés : .pdf car fige la mise en page, léger et universel) ; dans le cas
d’un partage pour modifications .docx (version souvent juste envoyée, par mo-
difiable par touxtes en même temps) ou Google docs. Inconvénients du .jpeg :
fichier lourd (une image par page, images séparées), perte de qualité (compres-
sion), pas d’édition, mauvaise lisibilité pour un rapport.
Hardware (la machine) Exercices p. 126
ex1 Configuration CPU expl. Intel Core i5 (processeur central, exécute les ins-
tructions), RAM expl. 8 Go (mémoire vive, rapide, volatile, utilisée par les pro-
grammes), Disque expl. SSD 512 Go (stockage permanent, si SSD, alors plus
rapide).
ex2 GPU expl. Nvidia GTX ou AMD Radeon (processeur graphique, gère l’affichage).
ex3 Périphériques : entrée (clavier, souris, micro.), sortie (écran, imprimante, haut-
parleurs), mixte (casque-micro)
ex4 Forces SSD rapide, RAM suffisante, bonne compatibilité (Windows) ;
Limites processeur moyen de gamme, carte graphique basique.
ex5 Ordinateur idéal
CPU quad-core récent (Intel i5 ou Ryzen 5), RAM de 16Go, Stockage SSD de
512Go + Cloud, périphériques (webcam, micro, ports USB-C, capacités Wi-Fi)
Networks (réseaux) Exercices p. 129
ex1 Adresse locale (quatre essais), réponses positives, preuve que la machine est joi-
gnable sur le réseau.
ex2 Ping vers [Link] : suite de réponses avec temps de latence. Connexion
Internet opérationnelle et nom de domaine résolu si aucun rejet.
ex3 Le rôle d’un DNS est de traduire les noms de domaine (ex. [Link]) en
adresses IP. Avec nslookup, on obtient l’adresse IP et le serveur DNS utilisé.
ex4 Ping / adresse interne : pas de passage par Internet, mais uniquement l’intranet.
Sys_TP03. Connectivité
Entités et attributs
MEMBRE COURS
INSCRIPTION ENTRAINEUR
Nom Nom
... voir MLD Nom
Courriel Heure
Date_Naissance
MEMBRE COURS
INSCRIPTION
Id (cp) int Id (cp) int
Id (cp) int
Nom Nom
(0,N) (1,N)
Id_Membre (1,N) (1,1)
Courriel Heure
Id_Cours
Date_Naissance Id_Entraineur
(0,N)
(1,1)
ENTRAINEUR
Id (cp) int
Nom
ENTRAINEUR - COURS (0,N) => COURS contient donc Id_Entraineur (clé étrangère ce)
SGBD_TP02. Silence on lit !
Entités et attributs
ABONNÉ LIVRE
EMPRUNT EMPRUNT_LIVRE
Nom Titre
Date ... voir MLD
Adresse Auteur
ISBN
Catégorie
ABONNÉ
Id (cp) int
Nom char
Adresse char
(0,1)
(1,N) LIVRE
EMPRUNT EMPRUNT_LIVRE Id (cp) int
Id (cp) int Id (cp) int Titre char
Date date (1,1) (1,N)
Id_Emprunt int
(0,N) (0,1)
Auteur char
Id_Abonne int Id_Livre int ISBN char
Categ. char
ABONNE - EMPRUNT (1,N) => EMPRUNT contient donc Id_Abonne (clé étrangère ce)
SGBD_TP03. Bon appetit ! EMPLOYÉ
prépare
(N)
Entités et attributs
EMPLOYÉ
Nom
CLIENT
(0,1)
(1,N)
COMMANDE PLAT
PLAT_COMMANDE
Id (cp) int Id (cp) int
Id (cp) int
Date date Nom char
Id_Commande int
Heure heure (1,1) (1,N) (1,N) (0,1) Prix decimal
Id_Plat int
Id_Client int Id_Employe int