Revenir
Revenir

Triangle de Pascal

En Python, une liste est délimitée par des crochets et les élements de cette liste sont séparés par des...

Sommaire

Activité CAPYTALE : Triangle de Pascal
Quelques rappels pour commencerGénération d'une listeListe de listesOpérations sur les listesModification des éléments d'une listeModification des éléments d'une liste par un parcoursExercices
Triangle de PascalRappel du principe et modélisationConstruction d'un triangle videComplétion du triangleUn résultat important

Activité CAPYTALE : Triangle de Pascal


Quelques rappels pour commencer

Génération d'une liste

En Python, une liste est délimitée par des crochets et les élements de cette liste sont séparés par des virgules.
a = [10, 4, 6, 9, 1]
On accède aux éléments d'une liste par leur position.Attention, la numération de ces positions commence à 0 !
a = [10, 4, 6, 9, 1]
# affiche l'élément d'indice 0, c'est-à-dire le nombre 10
print(a[0])
# affiche l'élément d'indice 2, c'est-à-dire le nombre 6
print(a[2])
# affiche le dernier élément de la liste
print(a[-1])

Liste de listes

Les éléments d'une liste en Python peuvent être eux-mêmes des listes, qui ne sont pas forcément de la même taille.
a = [ [5, 3, 2], [6, 1], [4, 7, 9]]
# affiche l'élément d'indice 0 de la liste a, c'est-à-dire la liste [5,3,2]
print(a[0])
# l'élément d'indice 2 de la liste a est la liste [4,7,9]
# l'élément d'indice 1 de cette liste est le nombre 7
# Pour afficher cet élément, on pourra donc faire...
print(a[2][1])

Opérations sur les listes

Lorsque l'on multiplie une liste par un entier n, le résultat est une liste composée de la première liste copiée n fois.
a = [0] * 3
print(a) # affiche [0, 0, 0]
b = [1, 2] * 4
print(b) # affiche [1, 2, 1, 2, 1, 2, 1, 2]
c = [[0]*6, [1]*7]
print(c) # affiche [[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1]]

Modification des éléments d'une liste

Pour modifier les éléments d'une liste a, on utilise la syntaxea[position] = nouvelle_valeur.
a = [5, 3 ,2, 7]
print(a)  # affiche [5, 3 ,2, 7]
# on remplace l'élément d'indice 2 par le nombre 8
a[2] = 8
print(a) # affiche [5, 3 ,8, 7]
Il est aussi possible, lorsque l'on modifie les valeurs d'une liste, d'utiliser les valeurs déjà existantes de la liste.
a = [5, 3 ,2, 7]
print(a) # affiche [5, 3, 2, 7]
a[1] = a[0] + a [2]
print(a) # affiche [5, 7, 2, 7]

Modification des éléments d'une liste par un parcours

Pour parcourir les éléments d'une liste et les remplacer un à un, il est également possible d'utiliser une boucle for. On rappelle par ailleurs que len(a) renvoie la longueur de la liste a.
# On crée une liste de taille 5 dont toutes les valeurs valent 0
a = [0] * 5
# Pour chaque entier i compris entre 0 et 4 (la longueur de la liste - 1),
# on remplace l'élément d'indice i de la liste par i au carré
for i in range(len(a)):
    a[i] = i ** 2
print(a) # affiche [0, 1, 4, 9, 16]
Remarque
La liste de l'exemple précédent peut également être générée par compréhension comme suit.
a = [i ** 2 for i in range(5)]

Exercices

Exercice 1
Sans exécuter le programme ou afficher les valeurs, déterminer les valeurs stockées dans les variables b, c et d du programme ci-dessous.
a = [[1, 2, 4], [3, 5, 7], [0, 9, 6, 8]]
b = a[1]
c = a[2][3]
d = a[0][-1]
Exercice 2
On considère la liste a ci-dessous. Sans exécuter le programme, déterminer les éléments de la liste a à l'issue de l'exécution de ce programme.
a = [[1, 2, 4], [3, 5, 7], [0, 9, 6, 8]]
a[0][1] = 11
a[1][2] = a [1][0] * a[1][1]
for i in range(4):
    a[2][i] = a [2][i] * 3

Triangle de Pascal

Rappel du principe et modélisation

Le triangle de Pascal est une présentation des coefficients binomiaux
(nk)\dbinom{n}{k}(kn​)
 sous la forme d'un tableau triangulaire : le nombre inscrit en
kkk
-ième position sur la
nnn
-ième ligne vaut ainsi
(n−1k−1)\dbinom{n-1}{k-1}(k−1n−1​)
.
La construction de ce triangle repose sur la relation de Pascal : pour tout entier naturel non nul 
nnn
et tout entier naturel 
kkk
tel que
0<k<n0<k<n0<k<n
Ainsi, chaque nombre dans le triangle de Pascal est obtenu en réalisant la somme des deux nombres au-dessus de lui.
Dans ce TP, nous représenterons le triangle de Pascal sous la forme d'une liste Python, chaque élément de cette liste étant elle-même une liste correspondant à une ligne de ce triangle.
Par exemple, le triangle de Pascal à 4 étages sera représenté par la liste suivante :
a = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]
Remarque
Ainsi, a[n][k] contiendra la valeur de
(nk)\dbinom{n}{k}(kn​)
.
Pour mieux visualiser le triangle, on peut par ailleurs utiliser la fonction suivante.
def afficher(a):
    for ligne in a :
        print('\t'.join([str(x) for x in ligne]))afficher(a)  
On note t la variable qui contient la taille du triangle de Pascal que l'on souhaite calculer.

Construction d'un triangle vide

Dans un premier temps, on va créer une fonction qui renvoie une liste de taille
ttt
. Chaque élément de cette liste sera une liste uniquement constituée de
000
: la première liste contiendra un
000
, la deuxième liste en contiendra deux, et ainsi de suite.
Compléter la fonction suivante pour qu'elle renvoie la liste correspondant à un triangle où tous les coefficients valent
000
.
def initialiser_triangle(t):
    triangle = [0] * t
    for i in range(t) :
        triangle[i] = [0] * (...)
    return triangle

Complétion du triangle

Exercice 1
Soit 
nnn
un entier naturel. Rappeler les valeurs de
(n0)\dbinom{n}{0}(0n​)
 et de
(nn)\dbinom{n}{n}(nn​)
.
Exercice 2
Compléter la fonction ci-dessous pour générer le triangle de Pascal à t étages.
def pascal(t):
    triangle = initialiser_triangle(t)
    # on place les valeurs de (0 parmi i) et de (i parmi i)
    for i in range(t):
        triangle[i][0] = ...
        triangle[i][i] = ...
    # on complète le tableau en utilisant la relation de Pascal
    for i in range(1, t) :
        for j in range(1,i) :
            triangle[i][j] = triangle[...][...] + triangle[...][...]
    return triangle

Un résultat important

Analyser le programme suivant.
1.Quelle est le rôle des deux fonctions mystère1 et mystère2 ci-dessous ?
2.Quel résultat du cours est mis en valeur par ce programme ?
def mystère1(L):
    ''' L est une liste'''
    S = 0
    for elt in L:
        S = S + elt
    return S
def mystère2(t):
    resultat = [0] * t
    triangle = pascal(t)
    for i in range(t) :
        resultat[i] = mystère1(triangle[i])
    return resultat