BIU IA - Python
29 Janvier 2026
Nous avons découvert la semaine dernière les types de bases de Python : les entiers, les flottants, les chaînes de caractères et les Booléens. Python se distingue d’autres langages de programmation en proposant des structures de données plus complexes sans avoir à recourir à des librairies spécialisées. Dans ce TP, nous allons nous concentrer sur deux de ces types : les listes et les tuples.
Ces structures de données permettent de représenter plusieur valeurs
d’un coup. On écrit les listes entre [ et ] en
séparant les éléments par des virgules. On écrit des tuples entre
( et ) en séparant les éléments par des
virgules. Par exemple :
[2,3,5,7,11]["carottes", "poireaux", "pommes de terres"](1,2)(2, "carottes")La différence principale entre ces deux structures est qu’un tuple a un nombre fixé d’éléments alors qu’une liste peut changer de taille au cours du programme.
Si techniquement Python accepte qu’on mélange les types dans une
liste, cela est considéré comme une mauvaise pratique puisqu’il est
difficile de traiter une liste dont on ne connaît pas le type des
éléments. On privilégiera un tuple dans ce cas-là, en respectant le type
à chaque position : par exemple un tuple (int,str)
a son premier élément entier et son second est une chaîne de
caractère.
On peut combiner ces structures et les stocker dans des variables :
soupe = [(3, "carotte"), (2, "poireau"), (4, "pomme de terre"), (1, "oignon")]morpion = [ [".", "x", "o"], [".", "o", "x"], ["o", "x", "o"]On va découvrir comment manipuler les éléments d’une liste.
l = [3,5,7,9].l[1], l[0] et l[3] dans la
console.l[4] : que
remarquez-vous ?l[-1].l[1] = 6
et affichez toute la liste avec print(l).l = [1,2,3]
q = l
l[0] = -1
print(q)
x = 5
y = x
x = 4
print(y)Les éléments d’une listes avec n éléments (et des tuples) sont
numérotés de 0 à n − 1 et on
peut accéder au ième élément
d’une liste en ajoutant [i] après
le nom de la liste (ou la liste elle-même, par exemple [1,2,3][2]
vaut 3). Si l’on essaie de lire une
valeur en dehors de ces index, on aura une erreur IndexError: list index out of range. On peut aussi
accéder à des index négatifs entre −1
(dernier élément) et −n
(premier élément).
Dans un programme, on a souvent besoin de savoir combien il y a
d’éléments dans une liste, par exemple, pour éviter de lire un index
invalide. On utilisera pour cela la fonction len(l). Par
exemple len([1,2,3,4,5])
vaut 5.
Six amis veulent décider aléatoirement qui va faire la vaisselle. Ils n’ont pas de dé avec eux pour le lancer et sont trop vieux pour ploumer, mais heureusement, ils ont un interpréteur Python sur leur téléphone. Ils veulent s’en servir pour savoir qui aura la chance de laver les assiettes.
On peut choisir un nombre aléatoire entre deux bornes a et b en Python avec la fonction random.randint(a,b) (pensez à charger
la librairie random avec import random
au début du code).
prenom
contenant 6 prénoms différents et écrire un programme qui affiche un
prénom aléatoire dans votre liste. Testez en exécutant le programme
plusieurs fois.prenom,
votre programme fonctionne toujours sans autre changement. On
devra automatiquement tirer un nombre aléatoire entre 0 et la longueur
de la liste.Une des opérations les plus importantes dans les listes est la
fonction append. Elle permet
d’ajouter une valeur à la fin d’une liste. Ainsi :
l = ["Alice", "Bob", "Carol"]
l.append("David")
print(l)affichera ["Alice", "Bob", "Carol", "David"].
On peut aussi concaténer des listes avec + :
l = ["Alice", "Bob", "Carol"]
q = ["David", "Emilie"]
print(l+q)affichera ["Alice", "Bob", "Carol", "David", "Emilie"].
De nombreuses fonctions permettent de manipuler les listes. Ainsi si
l=["a","a","b","c","d", "b"]
:
l.insert(3, "z")
insére "z"
en position 3, donnant ainsi ["a","a","b","z","c","d","b"].l.remove("b")
enlève la première occurrence de "b" :
["a","a","c","d", "b"].del l[2]
enlève le deuxième élément : ["a","a","c","d", "b"]."e" in l
renvoie False mais
"a" in l renvoie Truel.index("b")
renvoie l’index du premier "b",
ici 2.l.sort() trie les éléments dans
l’ordre croissant (alphabétique pour le texte).Toutes ces fonctions marchent aussi sur les chaînes de caractères !
Ainsi "Alice"[3]
est la lettre “c”. La raison est qu’une chaîne de caractères peut être
vue comme une liste de lettres. Ce n’est pas tout à fait comme cela
qu’elles sont implémentées en Python (même si c’est la façon historique
de le faire) mais elles partagent tout de même de nombreuses propriétés
permettant de les traiter de façon assez indifférencier.
Un meurtre a été commis dans le salon Anglais. Vous utilisez SherlockGPT pour vous aider à résoudre cette mystérieuse affaire. Cependant, à cause des restrictions énergétiques, votre IA vous conseille de mettre un col roulé et de finir l’enquête vous-même. Elle vous laisse un fichier suspect.py avec les instructions suivantes :
J’ai réduit la liste des suspectssuspect100000 personnes. Je sais que le meurtrier est le seul de cette liste qui ne s’appelle pas Alice ni Bob et que son nom ne commence pas par “A” ni par “B”. J’ai aussi généré une listearmes. Je sais que si le meurtrier est en position i dans la listesuspectalors il a utilisé l’arme qui est à la positionidans la liste.
On pourra charger les listes générées par SherlockGPT as la commande suivante :
from suspect import *
print(suspect)
print(armes)Retrouvez le meutrier et l’arme du crime !