Parcourir un tuple☘
Comme pour les chaînes de caractères, il faut connaître les trois parcours de tuple
utilisant for:
for...in...
for ..., ... in enumerate(...)
for ... in range(...)
Avec une boucle for...in...
☘
Une boucle for...in ...
permet de parcourir les éléments du tuple:
>>> a = ('informatique', 'python', 'réseau', 'javascript')
>>> for mot in a:
... print(mot)
...
informatique
python
réseau
javascript
Exercice 1☘
Écrire un corps possible pour la fonction somme ci-dessous:
def somme(t):
"""
t -- tuple dont les éléments sont des entiers
renvoie la somme des éléments de t
"""
Une aide
On a déjà fait un exercice de calcul de somme.
Rappelons ici le principe.
On veut calculer la somme des nombres a, b, c, ...
On commence par définir une variable qui servira d'accumulateur,
dans laquelle il n'y a rien initialement (rien du point de vue d'une somme,
c'est 0):
S ← 0
Puis on ajoute un à un les éléments:
S ← S + a # S contient maitenant 0 + a = a
S ← S + b # S contient maitenant a + b
S ← S + c # S contient maitenant a + b + c
...
Bien entendu, on n'écrit pas chacune des lignes d'affectation: elles sont toutes construites sur le même modèle, vous devriez donc pouvoir utiliser une boucle.
A vous!
Un code possible
On a commencé dans le code ci-dessous par définir deux fonctions premiersEntiers
et premiersCarres
dont l'utilité est seulement de générer des tuples qui serviront
à tester notre fonction somme.
def premiersEntiers(n):
"""
n -- entier > 0
renvoie le tuple (1, 2, 3, ..., n)
"""
t = (1, )
for i in range(2, n+1):
t = t + (i, )
return t
def premiersCarres(n):
"""
n -- entier > 0
renvoie le tuple (1**2, 2**2, 3**2, ..., n**2)
"""
t = (1, )
for i in range(2, n+1):
t = t + (i**2, )
return t
def somme(t):
"""
t -- tuple dont les éléments sont des entiers
renvoie la somme des éléments de t
"""
s = 0
for entier in t:
s = s + entier
return s
print(somme(premiersEntiers(10)))
print(somme(premiersCarres(3)))
Avec for ... in enumerate(...)
☘
Il peut arriver que l'on ait besoin des valeurs contenues dans le tuple mais aussi des indices de ces valeurs.
>>> a = ('informatique', 'python', 'réseau', 'javascript')
>>> for indice, valeur in enumerate(a):
... print(f"L'élément d'indice {indice} a pour valeur {valeur}.")
...
L'élément d'indice 0 a pour valeur informatique.
L'élément d'indice 1 a pour valeur python.
L'élément d'indice 2 a pour valeur réseau.
L'élément d'indice 3 a pour valeur javascript.
Exercice 2☘
Écrire un corps possible pour la fonction suivante:
def coincidence(t):
"""
t -- tuple d'entiers naturels
renvoie le nombre de valeurs vérifiant: valeur = indice
>>> coincidence((3, 2, 6))
0
>>> coincidence((3, 1, 6)) # l'élément d'indice 1 a la valeur 1
1
>>> coincidence((0, 2, 6, 3)) # l'élément d'indice 0 a pour valeur 0, l'élément d'indice 3 a pour valeur 3
2
"""
Testez...
Un code
Une solution dans ce fichier jupyter notebook (version html).