Aller au contenu

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