Nous avons manipulé des variables avec des types simples : int, bool, float, str. Ce sont des conteneurs ne contenant qu'une valeur.
Il existe également des types de données que l'on appelle séquence. Nous allons étudier deux types de séquence
: les tableaux et les p-uplets. En python, les tableaux s'appellent les listes et les p-uplets s'appellent les tuples.
Séquence
Famille indexée d'éléments par les entiers strictement positifs inférieurs ou égaux à un certain entier, ce dernier étant appelé « longueur » de la séquence. Il faut rapprocher ce mot au concept de suite en mathématiques.
En informatique, un tableau
est une structure de données représentant une séquence
finie d'éléments auxquels on peut accéder efficacement par leur position, ou indice, dans la séquence. C'est un type de conteneur
que l'on retrouve dans un grand nombre de langages de programmation.
En Python, une séquence est une collection ordonnée d’objets qui permet d’accéder à ses éléments par leur numéro de position dans la séquence. Les listes et les tuples sont des séquences.
Il y a des points communs et des différences entre ces deux types.
p-uplet, tuple en python
Un p-uplet est une séquence immutable. C'est à dire une suite indexée de valeurs (de n'importe quel type) que l'on ne peut pas modifier.
En Python, un p-uplet est de type tuple.
Construire un objet tuple en python.
Un tuple est défini à l'aide de parenthèses.
tup1=()
tup2=(3,) # tuple avec un seul élément
tup3=(1,4,5,'moto',4.6)
type(tup1) # pour accéder au type de l'objet
Vous avez à disposition un "bac à sable" pour vos tests.
Vous pouvez également utiliser jupyter ou la méthode qui vous convient le plus.
Il est important d'alimenter son cahier de bord.
accéder à un élément
Soient i
un entier et t
un tuple
i
d'un tuple t
on écrit
t[i]
t
en Python est accessible avec l'index -1
t[-1]
t[i:j+1]
pour afficher les élément de deux en deux on pourra écrire :
t[i:j+1:2]
on donne le tuple suivant : tup=(1,4,5,'moto',(12,'nsi','génial'),4.6)
Ecrire les lignes de code qui affiche :
Un tuple est un objet immutable : on ne peut pas réaffecter ses éléments, supprimer un élément ou encore en ajouter.
Tester ces deux lignes de codes :
tup=(1,4,5,'moto',4.6)
tup[3]='vive la moto !'
Un tuple est itérable. Cela signifie que l'on peut organiser une itération (boucle for) sur cette structure.
Tester les exemples suivants :
tup=(5,4,2,8,"moto")
for elt in tup : # méthode 1, elt prend à chaque tour les éléments de la séquence
print(elt) # print est utilisée à des fins d'observation de code
for i in range(len(tup)): # méthode 2, on parcourt les indices de la séquence
print(tup[i])
Opérations/méthodes | Description |
Méthodes et opérations communes aux listes et tuples. | |
x in s |
Renvoie True si un élément de s est égale à x, False sinon |
x not in s |
Renvoie True si aucun un élément de s n'est égale à x, False sinon |
len(s) |
Renvoie le nombre d'éléments de s |
s == s1 |
Renvoie True si s et s1 sont de même type, ont la même longueur,et ont des éléments égaux deux à deux. |
s[i] |
Renvoie l'élément d'indice i de s. Le premier élément a pour indice 0. |
s[i:j] |
Renvoie une partie de l'indice i à j non inclus |
s.index(x) |
Renvoie l'indice de la première apparition de x dans s |
s.count(x) |
Renvoie le nombre d'apparitions de x dans s |
s+t |
Renvoie une nouvelle séquence concaténation de s et t. |
n*t |
Renvoie une nouvelle séquence composée de la concaténation de t avec lui même n fois. |
En utilisant le code ci-dessous, vous utiliserez les méthodes et les opérations du tableau pour tester les différentes questions :
jours_1=('lundi','mardi','mercredi','jeudi','vendredi')
jours_2=('samedi','dimanche')
# Tester si samedi est un élément de jours_1
# Donner la longueur de jours_2
# Tester si jours_1 est égal à jours_2
# Donner le deuxième élément de jours_1
# Donner la partie de jours_1 entre le deuxième élément et le quatrième élément
# renvoyer l'indice de dimanche dans jours_2
# Renvoyer le nombre de samedi dans jours_2
# Créer un tuple semaine par concaténation de jours_1 et de jours_2
En utilisant un parcours de tuple avec la présence d'un indice, écrire une fonction
est_dans(element,tple)
qui en argument reçoit un entiers ( élément) et un tuple d'entier ( tple) qui renvoie un booleen indiquant la présence de élément dans tple.
on testera la fonction sur les scripts suivants :
est_dans(4,(1,2,3,4,5,6))
qui devrait renvoyer True
est_dans(9,(1,2,3,4,5,6))
qui devrait renvoyer False
import random
tple=()
for i in range(1000):
r=random.randint(1,1000)
tple=tple+(r,)
est_dans(400,tple)
Avez vous tous le même retour?
En Python, une fonction qui renvoie plusieurs éléments ( ex : return a,b,c ) renvoie un tuple.
def milieu(xA,yA,xB,yB) -> tuple:
"Formule qui renvoie les coordonnées du milieu d'un segment"
return (xA+xB)/2, (yA+yB)/2
type(milieu(1,3,-1,2))
En utilisant milieu(1,3,-1,2), comment afficher seulement l'abscisse ? L'ordonnée
?
Ecrire une fonction triangle_rect(n)
qui renvoie un tuple où chaque élément est un tuple de longueur trois, ces tuples sont constitués de trois entiers a, b,c tels que $0<a\leq b\leq c < n$ et le triangle de cotés $a$, $b$
et $c$ soit rectangle. Le tuple renvoyé doit contenir tous les triplets possibles.
Par exemple triangle_rect(20)
renvoie le tuple ((3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15))