Guide Python et SQL pour débutants
Guide Python et SQL pour débutants
Fortier
Python M = []
test d’égalité == for i in range(n):
différent != L = []
inférieur ou égal ≤ <= for j in range(p):
division euclidienne // [Link](0)
modulo % [Link](L)
et and
ou or Attention : le code ci dessous ne marche pas, car M a n fois
négation not la même ligne (modifier l’une modifie les autres).
def f(L):
• Ne pas écrire if x == True ou if x == False mais if x L[0] = 3
ou if not x (plus idiomatique). L1 = [2]
• Si L1 et L2 sont des listes de tailles n1 et n2 , L1 + L2 donne f(L1) # L1 est modifié
en complexité O(n1 + n2 ) une nouvelle liste contenant les
éléments de L1 suivis des éléments de L2. • Les indices commencent à partir de 0 : le premier élément
est L[0], le dernier L[len(L) - 1] (qui est obtenu aussi
• n*L duplique la liste L n fois (même chose que avec L[-1]).
L + L + ... + L). Exemple : [0]*4 donne [0, 0, 0, 0].
• L[i:j] extrait de L une sous-liste des indices i à j - 1.
• [... for i in ...] est une création de liste par com- On peut copier une liste avec L[:] ou [Link]().
préhension. Par exemple, [i**2 for i in range(5)]
donne [0, 1, 4, 9, 16] et est équivalent à : • Si x est une liste, un n-uplet, une chaîne de caractères ou
un tableau numpy :
L = [] – x[i] est le îềme élément de x
for i in range(5):
– x[-i] est le ième élément en partant de la fin
[Link](i**2)
– x[i:j] extrait les éléments de x du ième au jème exclu
(exemple : si )
• On peut aussi ajouter une condition dans une liste par com- – len(x) est la taille de x En revanche, on ne peut pas
préhension : [i**2 for i in range(5) if i % 2 == 0] modifier un n-uplet ou une chaîne de caractères (pas
donne [0, 4, 16]. de x[i] = ... ou de [Link](...) dans ce cas).
• Opérations sur une matrice M (comme liste de listes) : • Éviter de faire plusieurs fois le même appel de fonction :
stocker le résultat dans une variable à la place.
Python Signification
M[i][j] mi,j (élément ligne i, colonne j) • Ne pas confondre indice et élément d’une liste :
M[i] ième ligne for i in range(len(L)) parcourt les indices de L (i vaut
len(M) nombre de lignes 0, 1, 2, …, len(L) - 1), alors que for x in L parcourt les
len(M[0]) nombre de colonnes éléments de L (x vaut L[0], L[1], L[2], …, L[len(L) - 1]).
• for i in range(a, b, p) parcourt les entiers de a à
b - 1 en allant de p en p (par défaut a = 0 et p = 1).
• Créer une matrice n × p remplie de 0 :
• Pour écrire une fonction récursive, il faut toujours un cas de
M = [[0]*p for _ in range(n)]
base (qui ne fait pas appel à la fonction elle-même) et un
Ou utiliser des boucles for et append : cas récursif (qui fait appel à la fonction elle-même).
ITC2 SQL Q. Fortier
Pour les exemples, on considère une base de données avec 3 SELECT DISTINCT directeur FROM film, acteur
tables dont les schémas relationnels sont : WHERE directeur = nom
• film (id, titre, annee, directeur, budget, recette)
• acteur (id, nom) • [GROUP BY expr
• casting (id_film, id_acteur) [HAVING condition]]
Regroupe tous les enregistrements ayant la même valeur
Une clé d’une table est un ensemble minimal d’attributs per- expr en un seul enregistrement. Seuls les groupes vérifi-
mettant d’identifier de façon unique chaque enregistrement. ant condition sont renvoyés.
La clé primaire d’une table est une clé dont on garantit l’unic- Les fonctions d’agrégations (dans un SELECT ou
ité même après ajout dans la table. HAVING) s’appliquent alors pour chaque groupe :
Une clé étrangère est un attribut (ou ensemble d’attributs) COUNT(attribut) (nombre d’enregistrements non NULL),
faisant référence à une clé primaire d’une autre table. COUNT(*) (nombre d’enregistrements), SUM(attribut),
MAX(attribut), AVG(attribut) (moyenne), ...
Syntaxe générale de SELECT, dans cet ordre ([...] indiquant
Nombre de films réalisés chaque année depuis 2000 :
une commande optionnelle) :
SELECT annee, COUNT(*)
FROM film
SELECT [DISTINCT] expr1 [AS alias1], expr2, ...
WHERE annee >= 2000
FROM table1 [AS alias1], table2, ...
GROUP BY annee;
[WHERE condition]
[GROUP BY expr
[HAVING condition]] Directeurs ayant rapporté au moins 1 milliard :
[ORDER BY expr [DESC]]
[LIMIT entier SELECT directeur FROM film
[OFFSET entier]] GROUP BY directeur
HAVING SUM(recette) >= 1000000000
• SELECT [DISTINCT] expr1 [AS alias1], expr2, ...
Renvoie une table dont les colonnes correspondent à • [ORDER BY expr [DESC]]
expr1, expr2... Trie les enregistrements selon expr, croissant par défaut
expr1, expr2... sont des expressions, pouvant contenir (décroissant si DESC est utilisé).
des attributs, calculs et fonctions. Si un attribut attr Acteurs triés par le nombre de films joués :
est ambigu (car il est le même dans 2 tables t1 et t2), il
SELECT nom, COUNT(*) AS nb_films
faut le préfixer par son nom de table, par ex. [Link]. FROM acteur JOIN casting ON [Link] = id_acteur
* est un raccourci pour selectionner toutes les colonnes. JOIN film ON [Link] = id_film
AS renomme une colonne pour, par exemple, y faire GROUP BY nom
référence ensuite. ORDER BY nb_films DESC
DISTINCT supprime les doublons.
Obtenir tous les acteurs (sans doublon) : • [LIMIT n
SELECT DISTINCT nom FROM acteur; [OFFSET p]]
Films avec leur profit : Affiche seulement les n premiers enregistrements (en com-
SELECT titre, recette - budget FROM film; mençant à partir du (p + 1)ème). Souvent utilisé après
• FROM table1 [AS alias1], table2, ... un ORDER BY.
Tables d’où les valeurs sont sélectionnées. Deuxième film à plus gros budget :
table1, table2 est la table correspondant au produit SELECT titre FROM film
cartésien de table1 et table2. ORDER BY budget DESC
table1 JOIN table2 ON colonne1 = colonne2 réalise LIMIT 1 OFFSET 2;
la jointure de table1 et table2, où la colonne1 de
table1 est identifiée avec colonne2 de table2. On peut • Sous-requêtes : il est possible d’utiliser un SELECT ren-
mettre plusieurs JOIN à la suite. voyant une seule valeur à l’intérieur d’un autre SELECT,
Tous les directeurs et acteurs ayant travaillé ensemble : dans une condition ou un calcul. Tous les acteurs du film
à plus gros budget :
SELECT directeur, nom FROM film
JOIN casting ON [Link] = id_film SELECT nom FROM acteur
JOIN acteur ON id_acteur = [Link] JOIN casting ON id_acteur = [Link]
JOIN film ON id_film = [Link]
• [WHERE condition] WHERE titre = (SELECT titre FROM film
Ne considère que les enregistrements vérifiant condition. ORDER BY budget DESC LIMIT 1)
condition peut contenir des attributs, calculs, AND, OR,
<, <=, !=, LIKE, IN... • Opérateurs ensemblistes :
Tous les directeurs qui sont aussi acteurs : Étant donné deux requêtes de la forme SELECT ...
renvoyant deux relations table1 et table2 de même livre emprunté emprunt dans bibliotheque
schéma relationnel, il est possible d’obtenir leur union,
intersection et différence avec UNION, INTERSECT, MINUS.
Exemple : emprunte
table1 table2
attr1 attr2 attr3 attr1 attr2 attr3 emprunteur
a1 a2 a3 a1 a2 a3
b1 b2 b3 c1 c2 c3 3 relations binaires
attr1 attr2 attr3 • On peut spécifier le lien entre une entité et une associa-
a1 a2 a3 tion avec un couple (n, p) indiquant le nombre minimum
b1 b2 b3 et maximum de fois que l’entité peut apparaître dans l’as-
c1 c2 c3 sociation (p = ∗ s’il n’y a pas de maximum).
Résultat de Exemples :
SELECT * FROM table1 UNION SELECT * FROM table2; – Un livre a été écrit par au moins une personne, sans
limite supérieure. D’où la cardinalité (1, ∗) pour le
lien entre l’entité livre et l’association « écrit ».
attr1 attr2 attr3
– Une personne peut avoir écrit un nombre quelconque
b1 b2 b3
de livre. D’où la cardinalité (0, ∗).
Résultat de
– Si on suppose qu’une personne peut emprunter au
SELECT * FROM table1 MINUS SELECT * FROM table2
plus 5 livres, alors le lien entre l’entité personne et
l’association « emprunt » est de cardinalité (0, 5).
Modèle entité-association
livre
• Une entité est un ensembles d’objets similaires que l’on
(0, ∗) (1, ∗) auteur
titre écrit
souhaite stocker. nom
nom_auteur
Exemple : Livre, auteur...
• Une fonction f est récursive si elle s’appelle elle-même. • Pour résoudre un problème de programmation dynamique :
Elle est composée de : 1. Chercher une équation de récurrence. Souvent, cela
– Un (ou plusieurs) cas de base où f renvoie directe- demande d’introduire un paramètre.
ment une valeur, sans appel récursif. 2. Déterminer le(s) cas de base(s). Il faut qu’appliquer
– Un (ou plusieurs) appel récursif à f avec des argu- plusieurs fois l’équation de récurrence ramène à un cas
ments plus petits que ceux de l’appel initial, qui garan- de base.
tit de se ramener au cas de base.
3. Stocker en mémoire (dans une liste, matrice ou dictio-
Exemple : Calcul de n! = n × (n − 1)!. nnaire) les résultats des sous-problèmes pour éviter de
les calculer plusieurs fois.
def fact(n):
if n == 0: # cas de base n
• Exemple : Calcul de en utilisant la formule de Pascal
return 1
k
return n*fact(n - 1) # appel récursif
n n−1 n−1 n
= + et les cas de base = 1 et
k k − 1 k 0
Attention : une fonction récursive peut ne pas terminer
n
= 0 si n 6= 0.
(appels récursifs infinis), de même qu’un while peut faire 0
boucle infinie.
i
On utilise une matrice M telle que M[i][j] contienne .
j
• La fonction suivante calcule les termes de la suite de Fi-
bonacci (u0 = u1 = 1, un = un−1 + un−2 ) : def binom(n, k):
M = [[0]*(k + 1) for _ in range(n + 1)]
def fibo(n): for i in range(0, n + 1):
if n == 0 or n == 1: M[i][0] = 1
return 1 for i in range(1, n + 1):
return fibo(n - 1) + fibo(n - 2) for j in range(1, k + 1):
M[i][j] = M[i - 1][j - 1] + M[i - 1][j]
return M[n][k]
Cependant, la complexité est très mauvaise (exponen-
tielle)... En effet, si C(n) = complexité de fibo(n), alors
C(n) = C(n − 1) + C(n − 2) +K ce qui est une équation • La mémoïsation est similaire à la programmation dy-
| {z } | {z } namique mais en utilisant une fonction récursive plutôt que
f ibo(n−1) f ibo(n−2)
des boucles.
récurrente linéaire d’ordre 2 (du même type que celle véri-
Pour éviter de résoudre plusieurs fois le même problème
fiée par la suite de Fibonacci) que l’on peut résoudre pour
(comme pour Fibonacci), on mémorise (dans un tableau ou
trouver C(n) ∼ Arn .
un dictionnaire) les arguments pour lesquelles la fonction
Le soucis vient du fait que le même sous-problème est résolu
récursive a déjà été calculée.
plusieurs fois, ce qui est inutile et inefficace.
• Version mémoïsée du calcul de la suite de Fibonacci :
def fibo(n):
d = {} # d[k] contiendra le kème terme de la suite
def aux(k):
if k == 0 or k == 1:
return 1
if k not in d:
d[k] = aux(k - 1) + aux(k - 2)
return d[k]
return aux(n)
Algorithmes de classification
• Un algorithme de classification consiste à associer à chaque
donnée une classe (ou : étiquette).
Exemple : à chaque image, on veut associer l’objet
représenté par l’image.
0 1 2 7
6B 5B 4B 3B 2B 1B
Alice
1
(max)
Bob
−∞ 0 1
(min)
Alice
(max)
−2 −∞ −∞ −1 −1 0 1 0 1 1
Arbre min-max rempli de bas en haut, avec le coup optimal pour Alice entouré.
2 Programme du second semestre
2.1 Méthodes de programmation et analyse des algorithmes
On formalise par des leçons et travaux pratiques le travail entrepris au premier semestre concernant la disci-
pline et les méthodes de programmation.
Même si on ne prouve pas systématiquement tous les algorithmes, on dégage l’idée qu’un algorithme doit se
prouver et que sa programmation doit se tester.
Notions Commentaires
Instruction et expression. Effet de bord. On peut signaler par exemple que le fait que l’affectation soit une
instruction est un choix des concepteurs du langage Python et
en expliquer les conséquences.
Spécification des données attendues en On entraîne les étudiants à accompagner leurs programmes et
entrée, et fournies en sortie/retour. leurs fonctions d’une spécification. Les signatures des fonctions
sont toujours précisées.
Annotation d’un bloc d’instructions Ces annotations se font à l’aide de commentaires.
par une précondition, une postcondi-
tion, une propriété invariante.
Assertion. L’utilisation d’assertions est encouragée par exemple pour vali-
der des entrées. La levée d’une assertion entraîne l’arrêt du pro-
gramme. Ni la définition ni le rattrapage des exceptions ne sont
au programme.
Explicitation et justification des choix Les parties complexes de codes ou d’algorithmes font l’objet de
de conception ou programmation. commentaires qui l’éclairent en évitant la paraphrase. Le choix
des collections employées (par exemple, liste ou dictionnaire)
est un choix éclairé.
Terminaison. Correction partielle. Cor- La correction est partielle quand le résultat est correct lorsque
rection totale. Variant. Invariant. l’algorithme s’arrête, la correction est totale si elle est partielle et
si l’algorithme termine.
On montre sur plusieurs exemples que la terminaison peut se
démontrer à l’aide d’un variant de boucle.
Sur plusieurs exemples, on explicite, sans insister sur aucun for-
malisme, des invariants de boucles en vue de montrer la correc-
tion des algorithmes.
Jeu de tests associé à un programme. Il n’est pas attendu de connaissances sur la génération automa-
tique de jeux de tests ; un étudiant doit savoir écrire un jeu de
tests à la main, donnant à la fois des entrées et les sorties cor-
respondantes attendues. On sensibilise, par des exemples, à la
notion de partitionnement des domaines d’entrée et au test des
limites.
Complexité. On aborde la notion de complexité temporelle dans le pire cas en
ordre de grandeur. On peut, sur des exemples, aborder la notion
de complexité en espace.
Notions Commentaires
Représentation des entiers positifs sur La conversion d’une base à une autre n’est pas un objectif de for-
des mots de taille fixe. mation.
Représentation des entiers signés sur Complément à deux.
des mots de taille fixe.
© Ministère de l’enseignement supérieur, de la recherche et de l’innovation, 2021 Informatique — Filières MP, PC, PSI, PT
[Link] 6/10
Entiers multi-précision de Python. On les distingue des entiers de taille fixe sans détailler leur im-
plémentation. On signale la difficulté à évaluer la complexité des
opérations arithmétiques sur ces entiers.
Distinction entre nombres réels, déci- On montre sur des exemples l’impossibilité de représenter cer-
maux et flottants. tains nombres réels ou décimaux dans un mot machine
Représentation des flottants sur des On signale la représentation de 0 mais on n’évoque pas les
mots de taille fixe. nombres dénormalisés, les infinis ni les NaN.
Notion de mantisse, d’exposant. Aucune connaissance liée à la norme IEEE-754 n’est au pro-
gramme.
Précision des calculs en flottants. On insiste sur les limites de précision dans le calcul avec des flot-
tants, en particulier pour les comparaisons. Le comparatif des
différents modes d’arrondi n’est pas au programme.
Notions Commentaires
Vocabulaire des graphes. Graphe orienté, graphe non orienté. Sommet (ou nœud) ; arc,
arête. Boucle. Degré (entrant et sortant). Chemin d’un sommet
à un autre. Cycle. Connexité dans les graphes non orientés.
On présente l’implémentation des graphes à l’aide de listes d’ad-
jacence (rassemblées par exemple dans une liste ou dans un dic-
tionnaire) et de matrice d’adjacence. On n’évoque ni multi-arcs
ni multi-arêtes.
Notations. Graphe 𝐺 = (𝑆, 𝐴), degrés 𝑑(𝑠) (pour un graphe non orienté),
𝑑+ (𝑠) et 𝑑− (𝑠) (pour un graphe orienté).
Pondération d’un graphe. Étiquettes On motive l’ajout d’information à un graphe par des exemples
des arcs ou des arêtes d’un graphe. concrets.
Parcours d’un graphe. On introduit à cette occasion les piles et les files ; on souligne les
problèmes d’efficacité posés par l’implémentation des files par
les listes de Python et l’avantage d’utiliser un module dédié tel
que [Link].
Détection de la présence de cycles ou de la connexité d’un
graphe non orienté.
Recherche d’un plus court chemin dans Algorithme de Dijkstra. On peut se contenter d’un modèle de
un graphe pondéré avec des poids posi- file de priorité naïf pour extraire l’élément minimum d’une col-
tifs. lection. Sur des exemples, on s’appuie sur l’algorithme A* vu
comme variante de celui de Dijkstra pour une première sensi-
bilisation à la notion d’heuristique.
© Ministère de l’enseignement supérieur, de la recherche et de l’innovation, 2021 Informatique — Filières MP, PC, PSI, PT
[Link] 7/10
3 Programme du troisième semestre
3.1 Bases de données
On se limite volontairement à une description applicative des bases de données en langage SQL. Il s’agit de
permettre d’interroger une base présentant des données à travers plusieurs relations. On ne présente pas
l’algèbre relationnelle ni le calcul relationnel.
Notions Commentaires
Vocabulaire des bases de données : On présente ces concepts à travers de nombreux exemples. On
tables ou relations, attributs ou co- s’en tient à une notion sommaire de domaine : entier, flottant,
lonnes, domaine, schéma de tables, en- chaîne ; aucune considération quant aux types des moteurs SQL
registrements ou lignes, types de don- n’est au programme. Aucune notion relative à la représentation
nées. des dates n’est au programme ; en tant que de besoin on s’appuie
sur des types numériques ou chaîne pour lesquels la relation
d’ordre coïncide avec l’écoulement du temps. Toute notion re-
lative aux collations est hors programme ; on se place dans l’hy-
pothèse que la relation d’ordre correspond à l’ordre lexicogra-
phique usuel. NULL est hors programme.
Clé primaire. Une clé primaire n’est pas forcément associée à un unique attri-
but même si c’est le cas le plus fréquent. La notion d’index est
hors programme.
Entités et associations, clé étrangère. On s’intéresse au modèle entité–association au travers de cas
concrets d’associations 1 − 1, 1 − ∗, ∗ − ∗. Séparation d’une as-
sociation ∗ − ∗ en deux associations 1 − ∗. L’utilisation de clés
primaires et de clés étrangères permet de traduire en SQL les as-
sociations 1 − 1 et 1 − ∗.
Requêtes SELECT avec simple clause Les opérateurs au programme sont +, -, *, / (on passe outre les
WHERE (sélection), projection, renom- subtilités liées à la division entière ou flottante), =, <>, <, <=, >,
mage AS. >=, AND, OR, NOT.
Utilisation des mots-clés DISTINCT,
LIMIT, OFFSET, ORDER BY.
Opérateurs ensemblistes UNION,
INTERSECT et EXCEPT, produit carté-
sien.
Jointures internes 𝑇1 JOIN 𝑇2 … On présente les jointures en lien avec la notion de relations entre
JOIN 𝑇𝑛 ON 𝜙. Autojointure. tables. On se limite aux équi-jointures : 𝜙 est une conjonction
d’égalités.
Agrégation avec les fonctions MIN, MAX, Pour la mise en œuvre des agrégats, on s’en tient à la norme
SUM, AVG et COUNT, y compris avec SQL99. On présente quelques exemples de requêtes imbriquées.
GROUP BY.
Filtrage des agrégats avec HAVING. On marque la différence entre WHERE et HAVING sur des
exemples.
Mise en œuvre
La création de tables et la suppression de tables au travers du langage SQL sont hors programme.
La mise en œuvre effective se fait au travers d’un logiciel permettant d’interroger une base de données à
l’aide de requêtes SQL. Récupérer le résultat d’une requête à partir d’un programme n’est pas un objectif.
Même si aucun formalisme graphique précis n’est au programme, on peut décrire les entités et les as-
sociations qui les lient au travers de diagrammes sagittaux informels.
Sont hors programme : la notion de modèle logique vs physique, les bases de données non relation-
nelles, les méthodes de modélisation de base, les fragments DDL, TCL et ACL du langage SQL, les tran-
sactions, l’optimisation de requêtes par l’algèbre relationnelle.
© Ministère de l’enseignement supérieur, de la recherche et de l’innovation, 2021 Informatique — Filières MP, PC, PSI, PT
[Link] 8/10
3.2 Dictionnaires et programmation dynamique
Les dictionnaires sont utilisés en boîte noire dès la première année ; les principes de leur fonctionnement sont
présentés en deuxième année. Ils peuvent être utilisés afin de mettre en mémoire des résultats intermédiaires
quand on implémente une stratégie d’optimisation par programmation dynamique.
Notions Commentaires
Dictionnaires, clés et valeurs. On présente les principes du hachage, et les limitations qui en
découlent sur le domaine des clés utilisables.
Usage des dictionnaires en program- Syntaxe pour l’écriture des dictionnaires. Parcours d’un diction-
mation Python. naire.
Programmation dynamique. Propriété La mémoïsation peut être implémentée à l’aide d’un diction-
de sous-structure optimale. Chevau- naire. On souligne les enjeux de complexité en mémoire.
chement de sous-problèmes. Exemples : partition équilibrée d’un tableau d’entiers positifs,
Calcul de bas en haut ou par mémoïsa- ordonnancement de tâches pondérées, plus longue sous-suite
tion. Reconstruction d’une solution op- commune, distance d’édition (Levenshtein), distances dans un
timale à partir de l’information calcu- graphe (Floyd-Warshall).
lée.
Mise en œuvre
Les exemples proposés ne forment une liste ni limitative ni impérative. Les cas les plus complexes de
situations où la programmation dynamique peut être utilisée sont guidés. On met en rapport le statut
de la propriété de sous-structure optimale en programmation dynamique avec sa situation en stratégie
gloutonne vue en première année.
Notions Commentaires
Algorithme des 𝑘 plus proches voisins Matrice de confusion. Lien avec l’apprentissage supervisé.
avec distance euclidienne.
Algorithme des 𝑘-moyennes. Lien avec l’apprentissage non-supervisé.
La démonstration de la convergence n’est pas au programme.
On observe des convergences vers des minima locaux.
Jeux d’accessibilité à deux joueurs On considère des jeux à deux joueurs (𝐽1 et 𝐽2 ) modélisés par des
sur un graphe. Stratégie. Stratégie graphes bipartis (l’ensemble des états contrôlés par 𝐽1 et l’en-
gagnante. Position gagnante. semble des états contrôlés par 𝐽2 ). Il y a trois types d’états finals :
Détermination des positions gagnantes les états gagnants pour 𝐽1 , les états gagnants pour 𝐽2 et les états
par le calcul des attracteurs. Construc- de match nul.
tion de stratégies gagnantes. On ne considère que les stratégies sans mémoire.
Notion d’heuristique. Algorithme min- L’élagage alpha-beta n’est pas au programme.
max avec une heuristique.
Mise en œuvre
La connaissance dans le détail des algorithmes de cette section n’est pas un attendu du programme.
Les étudiants acquièrent une familiarité avec les idées sous-jacentes qu’ils peuvent réinvestir dans des
situations où les modélisations et les recommandations d’implémentation sont guidées, notamment
dans leurs aspects arborescents.
© Ministère de l’enseignement supérieur, de la recherche et de l’innovation, 2021 Informatique — Filières MP, PC, PSI, PT
[Link] 9/10
A Langage Python
Cette annexe liste limitativement les éléments du langage Python (version 3 ou supérieure) dont la connais-
sance est exigible des étudiants. Aucun concept sous-jacent n’est exigible au titre de la présente annexe.
Aucune connaissance sur un module particulier n’est exigible des étudiants.
Toute utilisation d’autres éléments du langage que ceux que liste cette annexe, ou d’une fonction d’un mo-
dule, doit obligatoirement être accompagnée de la documentation utile, sans que puisse être attendue une
quelconque maîtrise par les étudiants de ces éléments.
Traits généraux
— Typage dynamique : l’interpréteur détermine le type à la volée lors de l’exécution du code.
— Principe d’indentation.
— Portée lexicale : lorsqu’une expression fait référence à une variable à l’intérieur d’une fonction, Python
cherche la valeur définie à l’intérieur de la fonction et à défaut la valeur dans l’espace global du module.
— Appel de fonction par valeur : l’exécution de 𝑓(𝑥)évalue d’abord 𝑥 puis exécute 𝑓 avec la valeur calcu-
lée.
Types de base
— Opérations sur les entiers (int) : +, -, *, //, **, % avec des opérandes positifs.
— Opérations sur les flottants (float) : +, -, *, /, **.
— Opérations sur les booléens (bool) : not, or, and (et leur caractère paresseux).
— Comparaisons ==, !=, <, >, <=, >=.
Types structurés
— Structures indicées immuables (chaînes, tuples) : len, accès par indice positif valide, concaténation
+, répétition *, tranche.
— Listes : création par compréhension [𝑒 for 𝑥 in 𝑠], par [𝑒] * 𝑛, par append successifs ; len, ac-
cès par indice positif valide ; concaténation +, extraction de tranche, copie (y compris son caractère
superficiel) ; pop en dernière position.
— Dictionnaires : création {𝑐1 : 𝑣1 , …, 𝑐𝑛 : 𝑣𝑛 }, accès, insertion, présence d’une clé 𝑘 in 𝑑, len,
copy.
Structures de contrôle
— Instruction d’affectation avec =. Dépaquetage de tuples.
— Instruction conditionnelle : if, elif, else.
— Boucle while (sans else). break, return dans un corps de boucle.
— Boucle for (sans else) et itération sur range(𝑎, 𝑏), une chaîne, un tuple, une liste, un dictionnaire
au travers des méthodes keys et items.
— Définition d’une fonction def 𝑓(𝑝1 , …, 𝑝𝑛 ), return.
Divers
— Introduction d’un commentaire avec #.
— Utilisation simple de print, sans paramètre facultatif.
— Importation de modules avec import module, import module as alias, from module import 𝑓, 𝑔, …
— Manipulation de fichiers texte (la documentation utile de ces fonctions doit être rappelée ; tout pro-
blème relatif aux encodages est éludé) : open, read, readline, readlines, split, write, close.
— Assertion : assert (sans message d’erreur).
© Ministère de l’enseignement supérieur, de la recherche et de l’innovation, 2021 Informatique — Filières MP, PC, PSI, PT
[Link] 10/10