In [3]:
from metakernel import register_ipython_magics
register_ipython_magics()

Exercice 1

  1. Écrire une fonction moyenne3notes(a, b, c) qui renvoie la moyenne arithmétique d'une série de 3 notes a, b, c.

Réponse :

def moyenne3notes(a, b, c):
    return (a + b + c) / 3
  1. Proposer une fonction moyenne(n) qui prend en paramètres un nombre de notes et retourne la moyenne de ces notes saisies par l'utilisateur.

Réponse :

def moyenne(n):
    somme = 0
    for _ in range(n):
        note = int(input("Note ?"))
        somme = somme + note
    return somme / n
  1. Quel(s) mécanisme(s) pourrai(en)t nous permettre d'écrire une fonction qui calcule la moyenne d'une série de notes sans interaction avec l'utilisateur du programme ?

Réponse :

On aimerait pouvoir stocker une séquence de notes dans une variable.

In [6]:
def moyenne3notes(a, b, c):
    return (a + b + c) / 3

def moyenne(n):
    somme = 0
    for _ in range(n):
        note = int(input("Note ?"))
        somme = somme + note
    return somme / n

Exercice 2

  1. Soit la liste suivante : liste_pays = ["France","Allemagne","Italie","Belgique"].

Que renvoie : liste_pays[2] ?

Solution : "Italie"

  1. Quelle est la valeur référencée par le tableau L après exécution du programme ci-dessous ?

    L = [731, 732, 734]
    L[0], L[1] = L[1], L[0]
    M = L
    M[1] = 732
    

    Réponse 1 : [732, 731, 734] Réponse 2 : [731, 732, 734] Réponse 3 : [732, 732, 734]

Solution : [732, 732, 734]

  1. On définit : L = [10,9,8,7,6,5,4,3,2,1]. Quelle est la valeur de L[L[3]] ?

    • Réponse 1 : 3 Réponse 2 : 4
    • Réponse 3 : 7 Réponse 4 : 8

Solution : 3

  1. Écrire une fonction recherche(tab, element) qui prend en paramètre un tableau et un élément et qui retourne True si element est dans tab et False sinon.

    Solution :

def recherche(tab, element):
    for e in tab:
        if e == element:
            return True
    return False

Exercice 3

  1. Auteur : Germain Becker, question n°326 Genumsi.

    Quel est le tableau t construit par les instructions suivantes ?

    tab = [1, 2, -3, 7, 4, 10, -1, 0]
     t = [e for e in tab if e >= 0]
    
    • Réponse 1 : t = [1, 2, 7, 4, 10, 0]
    • Réponse 2 : t = [e, e, e, e, e, e]
    • Réponse 3 : t = [1, 2, 7, 4, 10]
    • Réponse 4 : t = [-3, -1, 0]

      Solution : t = [1, 2, 7, 4, 10]

  2. Quel est le résultat de l'évaluation de l'expression Python suivante ? Auteur : Eric Rougier

    [2 ** n for n in range(4)]

    Réponses :

    • Réponse 1 : [0, 2, 4, 6, 8]
    • Réponse 2 : [1, 2, 4, 8]
    • Réponse 3 : [0, 1, 4, 9]
    • Réponse 4 : [1, 2, 4, 8, 16]

      Solution : [1, 2, 4, 8]

  3. Qu'affiche le programme [Python][Python] ci-dessous ?

    L=[0,1,2]
    M=[3,4,5]
    N=[L[i]+M[i] for i in range(len(L))]
    print(N)
    

    Solution : [3,5,7]

  1. On exécute le script suivant :

    L = [12,0,8,7,3,1,5,3,8]
    
     a = [elt for elt in L if elt < 4]
    

    Quelle est la valeur de a à la fin de son exécution ?

    • Réponse 1 : [12,0,8] Réponse 2 : [12,0,8,7]
    • Réponse 3 : [0,3,1,3] Réponse 4 : [0,3,1]

Solution : [0,3,1,3]

Exercice 4

  1. On exécute le script suivant :

    a = [1, 2, 3]
     b = [4, 5, 6]
     c = a + b
    

    Que contient la variable c à la fin de cette exécution ?

    Réponses :

    • Réponse 1 : [5,7,9] Réponse 2 : [1,4,2,5,3,6]

    • Réponse 3 : [1,2,3,4,5,6] Réponse 4 : [1,2,3,5,7,9]

Solution : [1,2,3,4,5,6]

  1. Soit la fonction mystere ci-dessous.

    Quelle est la valeur retournée par mystere([831, 832, 833, 841, 842, 843]) ?

    def mystere(u):
       v = []
       n = len(u)
       for k in range(n):
         v = [u[k]]+v
       return v
    

    Solution : [843, 842, 841, 833, 832, 831]

Exercice 5

  1. Écrire une fonction occurences(v, t) qui renvoie le nombre d'occurences de la valeur v dans le tableau t.
In [13]:
def occurences(v, t):
    """Renvoie le nombre d'occurences de v
    dans le tableau t"""
    cpt = 0
    for e in t:
        if e == v:
            cpt = cpt + 1
    return cpt
  1. Auteur : Nicolas Réveret, question n°379 Genumsi

    On a saisi le code suivant :

liste = [0, 1, 2, 3]
compteur = 0
for i in range(len(liste)-1) :
    for j in range(i,len(liste)) :
        compteur += 1

Que contient la variable compteur à la fin de l’exécution de ce script ?

Solution : 9

In [11]:
%%tutor
liste = [0, 1, 2, 3]
compteur = 0
for i in range(len(liste)-1) :
    for j in range(i,len(liste)) :
        compteur += 1
  1. Revenons sur notre situation d'accroche.

    • Écrire une fonction somme(tab) qui renvoie la somme des éléments d'un tableau de nombres tab.
    • Écrire une fonction moyenne_arithmetique(tab) qui renvoie la moyenne arithmétique des éléments d'un tableau de nombres tab.
  1. En voulant programmer une fonction qui calcule la valeur minimale d'un tableau d'entiers, on a écrit :

    def minimum(L):
         mini = 0
         for e in L:
             if e < mini:
                 mini = e
         return mini
    

    Cette fonction a été mal programmée. Pour quel tableau ne donnera-t-elle pas le résultat attendu, c'est-à-dire son minimum ?

    Réponses :

    • Réponse 1 : [-1,-8,12,2,23]
    • Réponse 2: [0,18,12,2,3]
    • Réponse 3: [-1,-1,12,12,23]
    • Réponse 4: [1,8,12,2,23]

Solution : [1,8,12,2,23]

  1. Écrire une fonction max_tab(tab) qui renvoie le maximum d'un tableau de nombres passé en paramètre
In [15]:
def max_tab(tab):
    """Renvoie le maximum d'un tableau passé en paramètre"""
    if len(tab) == 0:
        return None
    else:
        maxi = tab[0]
        for k in range(1, len(tab)):
            if t[k] > maxi:
                maxi = tab[k]
        return maxi    

Aliasing

Aliasing et copie de tableau

In [8]:
%%tutor
a = 5
b = a
b = 6
t1 = [14, 18]
t2 = t1
t2[0] = 39
t1[1] = 45
In [9]:
%%tutor
t1 = [14, 18]
t2 = t1[:]

Exercice 6

  1. Écrire une fonction copie(tab) qui renvoie une copie superficielle du tableau tab sans utiliser de slicing.
In [16]:
def copie(tab):
    """renvoie une copie superficielle du tableau tab sans utiliser de slicing"""
    return [e for e in tab]
  1. Auteur : Nicolas Revéret

On considère le code suivant :

def f(tab):
  for i in range(len(tab)//2):
    tab[i],tab[-i-1] = tab[-i-1],tab[i]

Après les lignes suivantes :

tab = [2,3,4,5,7,8]
f(tab)

Quelle est la valeur de la variable tab ?

Réponses :

  • Réponse 1 [2,3,4,5,7,8] Réponse 2 [5,7,8,2,3,4]
  • Réponse 3 [8,7,5,4,3,2] Réponse 4 [4,3,2,8,7,5]

Solution : [8,7,5,4,3,2]

 Aliasing et passage de paramètres à une fonction

In [2]:
%%tutor

def incremente(x):
    x = x + 1
    return x

def incremente_tab(tab):
    for k in range(len(tab)):
        tab[k] = tab[k] + 1

a = 5
t1 = [5, 6, 7]
b = incremente(a)
incremente_tab(t1)

Exercice 7

  1. On veut écrire une procédure echange(tab, i, j) qui échange les éléments d'index i et j d'un tableau tab. On fournit le modèle ci-dessous :

    def echange(tab, i, j):
       assert 0 <= i < len(tab) and 0 <= j < len(tab), "message d'erreur"
       # à compléter
    
    • Remplacer le message d'erreur de l'assertion par un message pertinent.
    • Compléter la fonction.

Solution :

def echange(tab, i, j):
  assert 0 <= i < len(tab) and 0 <= j < len(tab), "index hors des bornes"
  tab[i], tab[j] = tab[j], tab[i]
  1. Écrire une procédure permutation_circulaire(tab) qui modifie la position des éléments du tableau tab par permutation circulaire de gauche à droite :
    >>> t = list(range(6))
    >>> t
    [0, 1, 2, 3, 4, 5]
    >>> permutation_circulaire(t)
    >>> t
    [5, 0, 1, 2, 3, 4]
    >>> permutation_circulaire(t)
    >>> t
    [4, 5, 0, 1, 2, 3]
    
In [4]:
def permutation_circulaire(tab):
    dernier = tab[len(tab) - 1]
    for k in range(len(tab) - 1, 0, -1):
        tab[k] = tab[k-1]
    tab[0] = dernier
In [5]:
t = list(range(6))
In [6]:
t
Out[6]:
[0, 1, 2, 3, 4, 5]
In [7]:
permutation_circulaire(t)
In [8]:
t
Out[8]:
[5, 0, 1, 2, 3, 4]

Exercice 8

  1. Écrire une fonction fonction filtre_notes(tab) qui extrait toutes les notes inférieures à 10 d'un tableau de notes entre 0 et 20 et les renvoie dans un autre tableau.
In [17]:
def filtre_notes(tab):
    """Extrait toutes les notes inférieures à 10
    d'un tableau de notes entre 0 et 20
    et les renvoie dans un autre tableau"""
    return [note for note in tab if note < 10]

def filtre_notes2(tab):
    """Extrait toutes les notes inférieures à 10
    d'un tableau de notes entre 0 et 20
    et les renvoie dans un autre tableau"""
    tab2 = []
    for note in tab:
        if note < 10:
            tab2.append(note)
    return tab2
  1. Écrire une fonction renvoyant le maximum d'un tableau passé en paramètre et le tableau des positions où ce maximum est atteint.
In [19]:
def maximum_pos(tab):
    """Renvoie le maximum d'un tableau passé en paramètre 
    et le tableau des positions où ce maximum est atteint."""
    if len(tab) == 0:
        return [None, []]
    maxi = tab[0]
    pos = [0]
    for k in range(1, len(tab)):
        if tab[k] > maxi:
            maxi = tab[k]
            pos = [k]
        elif tab[k] == maxi:
            pos.append(k)
    return [maxi, pos]
  1. On définit en Python la fonction suivante :
def f(L):
    S = []
    for i in range(len(L)-1):
        S.append(L[i] + L[i+1])
    return S

Quel est le tableau renvoyé par f([1, 2, 3, 4, 5, 6]) ?

  • Réponse 1 [3, 5, 7, 9, 11, 13]
  • Réponse 2 [1, 3, 5, 7, 9, 11]
  • Réponse 3 [3, 5, 7, 9, 11]
  • Réponse 4 cet appel de fonction déclenche un message d'erreur

Solution : [3, 5, 7, 9, 11]

In [18]:
def f(L):
    S = []
    for i in range(len(L)-1):
        S.append(L[i] + L[i+1])
    return S

print(f([1, 2, 3, 4, 5, 6]))
[3, 5, 7, 9, 11]