Écriture d’algorithmes en langage naturel ou Python

1èreMathematiquesNotion de liste et algorithmesÉcriture d’algorithmes en langage naturel ou Python~9 min de lecture

Écriture d’algorithmes en langage naturel ou Python

Un algorithme est une recette précise ; une liste est une boîte à cases numérotées : avec quelques instructions (affectation, condition, boucle), on peut parcourir une liste pour calculer une somme, une moyenne, un maximum ou compter des éléments.

Objectifs

  • Écrire un algorithme en langage naturel puis le traduire en Python (et inversement).
  • Utiliser variables, affectation, instructions conditionnelles, boucles bornées (for) et non bornées (while), fonctions.
  • Créer une liste en extension, par ajouts successifs (append) ou en compréhension.
  • Accéder à un élément par son indice, connaître la longueur d’une liste, parcourir une liste par ses indices ou par ses éléments.
  • Programmer les algorithmes classiques sur les listes : somme, moyenne, maximum, comptage, recherche, termes d’une suite.

1. Algorithme, langage naturel et Python

On peut écrire un algorithme :

  • en langage naturel (en français structuré), pour réfléchir et communiquer ;
  • en Python, pour que l’ordinateur l’exécute.
Langage naturelPython
a prend la valeur 5a = 5
Si a > 3 alors … sinon …if a > 3: … else: …
Pour k allant de 1 à 10 …for k in range(1, 11):
Tant que s < 100 …while s < 100:
Renvoyer sreturn s

Exemple résolu : une boucle « tant que »

Awa a 5 000 F CFA d’économies et en ajoute 1 500 chaque semaine. Écris un algorithme qui donne le nombre de semaines nécessaires pour atteindre au moins 20 000 F CFA. Cherche d’abord, puis déroule les étapes.

Langage naturel : s prend la valeur 5000 ; n prend la valeur 0 ; tant que s < 20000 : s prend la valeur s + 1500 et n prend la valeur n + 1 ; renvoyer n.
Python :
def semaines():
    s = 5000
    n = 0
    while s < 20000:
        s = s + 1500
        n = n + 1
    return n
Vérification par le calcul : il faut \(5000 + 1500n \geq 20000\), soit \(1500n \geq 15000\), donc \(n \geq 10\). La fonction renvoie 10 : après 10 semaines, Awa a exactement 20 000 F CFA.

Quelles valeurs prend k dans la boucle for k in range(1, 6) ?

  1. 1, 2, 3, 4, 5, 6
  2. 0, 1, 2, 3, 4, 5
  3. 1, 2, 3, 4, 5
range(a, b) va de a inclus à b exclu : ici de 1 à 5.

2. Les listes en Python

2.1 Créer une liste

  • En extension : on écrit tous les éléments. prix = [250, 1000, 500, 1500, 750]
  • Par ajouts successifs : on part d’une liste vide et on ajoute avec append.
    L = []
    for k in range(4):
        L.append(3 * k)
    # L vaut [0, 3, 6, 9]
  • En compréhension : on décrit la règle de construction. carres = [k**2 for k in range(5)] donne [0, 1, 4, 9, 16]. On peut ajouter une condition : [k for k in range(10) if k % 2 == 0] donne [0, 2, 4, 6, 8].

2.2 Indices et longueur

Si une liste contient \(n\) éléments, ses indices vont de \(0\) à \(n-1\). On lit l’élément d’indice \(i\) avec L[i], la longueur avec len(L), le dernier élément avec L[-1] ou L[len(L) - 1]. On modifie un élément par affectation : L[1] = 8.

2.3 Parcourir une liste

Deux façons de parcourir une liste :

# par les indices
for i in range(len(prix)):
    print(i, prix[i])

# directement par les éléments
for p in prix:
    print(p)

Avec L = [3, 7, 2], quelle est la valeur de L[-1] + len(L) ?

  1. 6
  2. 5
  3. 10
L[-1] est le dernier élément, 2, et len(L) vaut 3 : 2 + 3 = 5.

Que vaut la liste [2*k + 1 for k in range(4)] ?

  1. [1, 3, 5, 7]
  2. [3, 5, 7, 9]
  3. [1, 3, 5, 7, 9]
k prend les valeurs 0, 1, 2, 3, et 2k + 1 donne 1, 3, 5, 7.

3. Les algorithmes classiques sur les listes

3.1 Somme et moyenne : l’accumulateur

def moyenne(L):
    s = 0
    for x in L:
        s = s + x
    return s / len(L)

Avec prix = [250, 1000, 500, 1500, 750] : la somme vaut \(250 + 1000 + 500 + 1500 + 750 = 4000\), donc la moyenne vaut \(\dfrac{4000}{5} = 800\) F CFA.

3.2 Le maximum : le record à battre

En langage naturel : m prend la valeur du premier élément ; pour chaque élément x de la liste, si x > m alors m prend la valeur x ; renvoyer m.

flowchart TD
A[m prend le premier élément] --> B{Reste-t-il un élément x}
B -->|oui| C{x plus grand que m}
C -->|oui| D[m prend la valeur x]
C -->|non| B
D --> B
B -->|non| E[Renvoyer m]
def maximum(L):
    m = L[0]
    for x in L:
        if x > m:
            m = x
    return m

Exemple résolu : faire tourner l’algorithme à la main

Déroule maximum([250, 1000, 500, 1500, 750]) en suivant la valeur de m.

Départ : m = 250 (premier élément). x = 250 : 250 n’est pas plus grand que 250, m reste 250.
x = 1000 : 1000 > 250, donc m = 1000. x = 500 : non, m reste 1000.
x = 1500 : 1500 > 1000, donc m = 1500. x = 750 : non, m reste 1500.
Fin de la liste : la fonction renvoie 1500, le prix le plus élevé.

3.3 Compter et rechercher

Kofi a les notes notes = [12, 8, 15, 9, 10, 14]. Combien de notes sont supérieures ou égales à 10 ? Écris la fonction, puis donne le résultat.

Voir la solution
def compter(L, seuil):
    c = 0
    for x in L:
        if x >= seuil:
            c = c + 1
    return c

compter(notes, 10) renvoie 4 : les notes 12, 15, 10 et 14. On peut aussi écrire len([x for x in notes if x >= 10]).

Pour savoir si une valeur est présente, Python propose x in L (renvoie True ou False) ; l’algorithme correspondant parcourt la liste et renvoie True dès qu’il trouve l’élément.

3.4 Les termes d’une suite dans une liste

Soit la suite définie par \(u_0 = 1\) et \(u_{n+1} = 2u_n + 1\). Écris une fonction qui renvoie la liste des termes \(u_0\) à \(u_n\), puis donne la liste pour \(n = 4\).

Voir la solution
def termes(n):
    u = 1
    L = [u]
    for k in range(n):
        u = 2 * u + 1
        L.append(u)
    return L

Calcul : \(u_1 = 2 \times 1 + 1 = 3\), \(u_2 = 7\), \(u_3 = 15\), \(u_4 = 31\). termes(4) renvoie [1, 3, 7, 15, 31].

Une fonction doit calculer la somme des éléments d’une liste. Quelle erreur rend le résultat faux ?

  1. Initialiser s à 0 avant la boucle
  2. Parcourir la liste avec for x in L
  3. Écrire s = 0 à l’intérieur de la boucle
Si s est remis à 0 à chaque tour, l’accumulateur perd tout ce qu’il avait additionné : la fonction renvoie seulement le dernier élément.

Erreurs fréquentes

  • Confondre = (affectation) et == (test d’égalité).
  • Oublier que les indices commencent à 0 et que range(n) s’arrête à \(n - 1\).
  • Oublier les deux-points ou l’indentation après for, while, if, def.
  • Placer l’initialisation d’un accumulateur dans la boucle, ou le return dans la boucle (la fonction s’arrête au premier tour).
  • Écrire une boucle while dont la condition ne devient jamais fausse : le programme tourne sans fin.

Récapitulatif

  • Un algorithme s’écrit en langage naturel puis se traduit en Python : affectation, condition, boucle for (nombre de tours connu), boucle while (on s’arrête quand une condition devient fausse), fonction avec return.
  • Une liste se crée en extension, par ajouts successifs avec append, ou en compréhension.
  • Indices de 0 à len(L) − 1 ; L[i] lit l’élément d’indice i ; L[-1] est le dernier.
  • Algorithmes types : somme et moyenne (accumulateur), maximum (record), comptage (compteur), recherche, liste des termes d’une suite.
Affectation
a = 5 : la variable a prend la valeur 5. Le test d’égalité s’écrit ==.
Boucle for ou while
for : nombre de tours connu à l’avance. while : on répète tant qu’une condition est vraie.
Indice d’une liste
Numéro de la case, de 0 à len(L) − 1 ; L[0] est le premier élément, L[-1] le dernier.
Liste en compréhension
[k**2 for k in range(5)] donne [0, 1, 4, 9, 16].
Accumulateur
Variable initialisée avant la boucle (s = 0) et augmentée à chaque tour : sert pour somme et moyenne.
Algorithme du maximum
m = premier élément, puis m = x chaque fois qu’un élément x est plus grand que m.

Teste tes connaissances sur ce cours

Crée ton compte gratuitement pour accéder aux quiz associés et suivre ta progression.