Vous êtes sur la page 1sur 11

Python

Les tuples

Déjà, le mot fait peur… Cocorico le terme vient du français et plus


précisément du langage « matheux » qui parlent plutôt de « p-uplés ».
Bon, c’est quoi ? Saisir dans la console les commandes suivantes :

Que contiennent les variables a, b et c ?

A votre avis, que fait la séquence d’instructions suivante ?

Un « tuple » c’est la donnée de plusieurs éléments sous un seul et même


nom. Ces éléments peuvent être de types différents sans aucun problème.
Les parenthèses sont optionnelles (mais c’est tellement plus joli, non ?)
Vérifier qu’un tuple est « non mutable », c’est-à-dire, qu’il est
impossible de le modifier, comme les chaînes de caractères.

Ok, ok, mais à quoi ça sert ?

Bonne question…
 à faire des affectations multiples,
 à représenter des vecteurs ou des points chez nos amis
matheux,
 à permettre à une fonction de renvoyer plusieurs valeurs en
même temps…

Essayer par exemple ceci :

Puis, dans la console…

Juste pour tester, créer 2 tuples A et B, puis voir ce que fait la


commande A+B

Créer une fonction milieu(A,B) qui prend pour argument 2 tuples, A et


B représentant chacun un point du plan (donc par exemple A=(0,0) et
B=(3,5)) et qui renvoie un tuple qui contient les coordonnées du point au
milieu du segment [AB].

Créer une fonction distance(A,B) qui renvoie la distance entre les


points A et B

 xB  xA    yB  yA 
2 2
Pour info : distance 
Soyons FOR

Pour ceux d’entre vous qui programment dans d’autres langages, la « boucle
for » est bien plus universelle en python. En fait, for permet de parcourir un
à un, différents éléments que l’on peut accéder avec des [] (donc, les chaînes
de caractères, les tuples, les listes que nous verrons en dessous).
Exemple :

OUI… Ça permet de refaire certains exercices de manière plus simple et


rapide qu’avec la « boucle while ».

Quel est l’équivalent avec while des 2 exemples précédents ?

Les listes (ou « tableaux » dans d’autres langages)

C’est quoi ? C’est comme des tuples mais en mieux, parce qu’on peut les
modifier. En fait, c’est vraiment tout pareil à part qu’au lieu de mettre des
éléments entre parenthèses, on les met entre crochets.
Facile non ? Bien entendu, voyez ce que renvoie la fonction type(ma_liste)

Et maintenant, vous avez le droit d’essayer ceci :

Tapez ma_liste dans la console et voyez que tout s’est bien passé !

Bon, que peut-on faire de sympa avec les listes ?

Dans la console, saisir puis afficher à


nouveau ma_liste.

Essayer dans la console les instructions suivantes puis, à chaque fois, refaire
afficher ma_liste.

Avez-vous bien compris ?? Vous aurez remarqué les crochets et les


parenthèses dans les exemples précédents…

Prévoir ce que vaut la liste liste après l’exécution du programme suivant ?

Exercices :
 Ecrire la fonction qui
prend une liste de nombres, et renvoie leur somme.

somme([1,2,3,4]) renverra 10

 Ecrire la fonction qui


renvoie non plus la somme mais la moyenne.
Et donc

notes = [17,12,11.5]
moyenne(notes)

renverra… 13.5 !

Encore, encore, encore !!!!

 Ecrire les fonctions valeur_max(liste) et valeur_min(liste)


qui renvoient respectivement les valeurs maximales et
minimales d’une liste de nombres.
…bon, ok… elles existaient déjà… (max() et min()) mais vous n’avez pas le
droit de vous en servir.
 Ecrire une fonction infos(liste) qui renvoie un tuple
contenant la valeur min, la max, la somme et la moyenne.

La minute du prof : le « coût » de notre algorithme


DANS LE PIRE DES CAS, pour une liste de longueur N, combien d’opérations seront
nécessaires pour trouver l’élément min ou max de la liste ??

Dernières petites choses à savoir sur les listes…

 ma_liste.reverse() renvoie la liste ma_liste à l’envers


 ma_liste.index(valeur) renvoie l’indice de la liste où se trouve
la valeur en question. Si elle n’y est pas, cela renvoie une
erreur.
 ma_liste.sort() trie la liste par ordre croissant
 Ne pas oublier que for fonctionne avec les listes…
Ecrire une fonction enleve_tous(liste,element) qui renvoie une liste
où tous les element ont été supprimés. Si l’élément n’y est pas, la liste
d’origine est renvoyée sans créer d’erreur.
Exemples
 enleve_tous([1,1,1,2,3],1) renvoie [2,3]
 enleve_tous([1,1,1,2,3],4) renvoie [1,1,1,2,3]

Les effets de bords

Cette fonction que vous venez d’écrire à un ENORME INCONVENIENT :


pour vous en rendre compte, essayer le code suivant :
liste = [1,2,3,3,3,1,3]
enleve_tous(liste,3)
liste
Vous avez compris ? Elle modifie la liste passée en paramètre au lieu de
fabriquer une nouvelle liste qu’elle renvoie. Cela se nomme un effet de
bord. La plupart du temps, ce n’est pas ce que vous souhaitez faire. Nous
verrons plus bas une manière de s’en sortir.

Exercices :

 Ecrire une fonction nombre_d_occurences(liste, element) qui


renvoie le nombre de fois que l’élément element apparait dans
la liste. Par exemple nombre_d_occurences([1,1,1,2],1)
renvoie 3 alors que nombre_d_occurences([1,1,1,2],4)
renverra 0.

 Ecrire une fonction elimine_doublons(liste,element) qui ne


laisse qu’une seule occurrence de element (s’il est dans la liste,
bien entendu, sinon il ne se passe rien !). Par exemple
elimine_doublons([1,1,1,4],1) renverra [1,4] – indice :
servez-vous de la fonction nombre_d_occurences() !

 Ecrire enfin une fonction elimine_tous_les_doublons(liste) qui


supprime tous les doublons de la liste. Par exemple
elimine_doublons([1,1,2,2,2,4,5,7,7]) renverra [1,2,4,5,7].
range()

Et voilà THE bonne nouvelle… la méthode range(). Je sens que vous êtes
impatients de la tester non ? Si ! Alors allons-y !

Sympa pour faire des boucles non ?

Et en plus, ça marche aussi dans l’autre sens !

Réécrire les 3 exemples précédents avec des while

Remarquer, comme d’hab, que par défaut la liste commence à 0 et que la


limite est exclue !

range(5) -> [0,1,2,3,4]


range(2,6) -> [2,3,4,5]
range(0,10,2) -> [0,2,4,6,8]

Réécrire la fonction punition(phrase,nombre_de_fois) avec un for et


un range().
Les listes par « compréhension »

Il s’agit d’une très puissante technique de fabrication d’une nouvelle liste à


partir d’une autre liste… Dans la console, saisir

Que fait la séquence suivante ?

On peut même rajouter une condition :

Tiens, les nombres pairs entre 0 et 99 :

Ecrire une liste par compréhension qui donne les 15 premières


puissances de 2.

Réécrire la fonction enleve_tous(liste,element) sans effet de


bord.

Ecrire une liste par compréhension qui renvoie les nombres impairs
positifs inférieurs à 100 (pour mémoire, un nombre impair est de la
forme 2  k  1 où k est un nombre entier ou alors, c’est un nombre dont le
reste de la division par 2 est non nul).
Que fait la fonction mystère suivante ?

Ecrire une liste par compréhension qui renvoie la liste


[-1,+2,-3,-4,……,+999,-1000].
Que vaut la somme -1+2-3+…+999-1000 ? (soit vous vous servez de la
fonction somme() que nous avons écrite soit… de la fonction sum() qui existe
déjà et qui fait la même chose !)

Calculer la somme des carrés des 10 premiers entiers


(1²+2²+….+10²).

Calculer la somme des carrés des 15 premiers entiers pairs


seulement (2²+4²+…)

D’après https://www.codingame.com/playgrounds/17176/recueil-dexercices-pour-apprendre-python-au-lycee/cours---les-listes-suite

Entrainement pour le prochain contrôle…


Que fait le code suivant ?

ma_liste_de_mots= ["maths", "info", "python", "exposant", "alpha", "fonction",


"parabole", "equilateral", "orthogonal", "cercle", "isocèle" ]
print([ mot for mot in ma_liste_de_mots if mot[0] in "aeiouy"])
Les listes de listes (ou tableaux de tableaux)

Et si on se fabriquait une liste de listes ? Tiens, on essaye :

t = [ [0,1,2], [3,4,5], [6,7,8], [9,10,11] ]

que l’on peut d’ailleurs aussi écrire de manière plus sympa

t = [
[0,1,2],
[3,4,5],
[6,7,8],
[9,10,11] ]

Comment accéder à la liste [6,7,8] ? C’est le 3ème élément de la liste t, son


indice est donc 2 (oui, puisqu’encore une fois, les indices démarrent à 0).
Vérifiez le en tapant dans la console t[2].

Et comment un accède au 7 ? C’est le 2ème élément (indice 1) de t[2] donc


t[2][1] !

Exercices :
 Dans la syntaxe t[i][j] le i correspond à la ligne ou la
colonne ? Et le j ?
 Que vaut l’élément t[1][1] ?
 Que fait la commande suivante t[2][0] = 15 ?
 Que fait la liste par compréhension suivante ?
[ [ 0 for j in range(4) ] for i in range(3) ]
 Ecrire une liste par compréhension qui fabrique le tableau t qui
a servi d’exemple à cette section.

Vous aimerez peut-être aussi