Structure de données : tuple

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.

Définition

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 les objets tuples

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

*

on donne le tuple suivant : tup=(1,4,5,'moto',(12,'nsi','génial'),4.6)

Ecrire les lignes de code qui affiche :

  1. moto
  2. le dernier élément du tuple
  3. (4,5)
  4. 'nsi','génial'

Code de déblocage de la correction :

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])

Les opérations et les méthodes sur les tuples

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


Code de déblocage de la correction :

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?

Code de déblocage de la correction :

tuple et fonction

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 ?

Code de déblocage de la correction :

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))

Code de déblocage de la correction :