Aller au contenu

Algorithmique et programmation Python — cours de Seconde

Algorithme, programme et test, Variables et types, Opérations et booléens, Entrées et sorties Lecture ≈ 5 min.

L'algorithmique intervient dans tous les domaines du programme. Il faut savoir décrire un algorithme en français, écrire des programmes simples en Python, et lire, comprendre, compléter ou modifier des programmes plus complexes.

1. Algorithme, programme et test

Définitions
  • Un algorithme est une suite finie et non ambiguë d'instructions permettant de résoudre un problème.
  • Un programme est la traduction de cet algorithme dans un langage informatique.
  • Un jeu de tests comprend des cas ordinaires, des cas limites et, si pertinent, des cas interdits.

2. Variables et types

Types au programme
TypePythonExemple
entierintn = 12
flottantfloatx = 2.5
booléenboolok = x >= 0
chaîne de caractèresstrnom = "Ada"

En Python, le séparateur décimal est le point. 2.5 est valide ; 2,5 représente autre chose.

Affectation

L'instruction x = expression calcule l'expression puis stocke le résultat dans x. Ce signe n'est pas une égalité mathématique symétrique.

Exemple à tracer
x = 3
x = x + 2
x = 4 * x

Après les trois lignes, x vaut successivement 3, 5 puis 20. L'instruction x = x + 2 signifie « remplacer x par son ancienne valeur augmentée de 2 ».

3. Opérations et booléens

RôlePython
addition, soustraction, produit+, -, *
division décimale/
puissance**
quotient entier, reste//, %
égalité, différence==, !=
comparaisons<, <=, >, >=
connecteursand, or, not
Exemples

17 // 5 vaut 3 et 17 % 5 vaut 2. Le test n % 2 == 0 vaut True si n est pair.

4. Entrées et sorties

Conversion d'une saisie

input() renvoie une chaîne. Pour calculer, il faut souvent convertir :

age = int(input("Âge : "))
taille = float(input("Taille en mètres : "))
print("Dans un an :", age + 1)

5. Instruction conditionnelle

Structure
if condition:
    instructions_si_vrai
else:
    instructions_si_faux

L'indentation délimite les blocs. elif permet d'enchaîner plusieurs cas.

Exemple
def signe_affine(x):
    valeur = 2*x - 6
    if valeur < 0:
        return "négatif"
    elif valeur == 0:
        return "nul"
    else:
        return "positif"

6. Boucle bornée for

Définition

Une boucle bornée répète un bloc un nombre connu de fois. range(n) produit 0, 1, ..., n − 1 : il y a n passages.

Exemple résolu : somme
def somme_entiers(n):
    s = 0
    for k in range(1, n + 1):
        s = s + k
    return s

Pour n = 4, s vaut successivement 0, 1, 3, 6, 10. La fonction renvoie 1 + 2 + 3 + 4 = 10.

7. Boucle non bornée while

Définition

Une boucle while se répète tant qu'une condition est vraie. Il faut s'assurer qu'une variable évolue vers l'arrêt, sinon la boucle peut être infinie.

Exemple : première puissance dépassant un seuil
def premier_exposant(a, seuil):
    n = 0
    puissance = 1
    while puissance <= seuil:
        puissance = puissance * a
        n = n + 1
    return n

Pour a = 2 et seuil = 100, la fonction renvoie 7, car 26 = 64 ≤ 100 et 27 = 128 > 100. On suppose ici a > 1 et seuil ≥ 1 afin de garantir l'arrêt.

8. Fonctions à un ou plusieurs arguments

Définition

Une fonction Python est définie avec def. Les arguments sont des données d'entrée ; return renvoie le résultat et termine l'appel.

Exemple
def distance(xA, yA, xB, yB):
    return ((xB - xA)**2 + (yB - yA)**2)**0.5

d = distance(-2, 1, 4, 5)

La fonction a quatre arguments et renvoie ici 52.

Propriétéprint ou return ?

print affiche une information ; return fournit une valeur réutilisable dans un calcul. Une fonction mathématique doit le plus souvent renvoyer son résultat.

9. Fonctions aléatoires et simulations

Expérience à deux issues
from random import random

def experience(p):
    if random() < p:
        return 1
    else:
        return 0

def repetitions(n, p):
    succes = 0
    for i in range(n):
        succes = succes + experience(p)
    return succes

random() produit un flottant dans [0 ; 1[. La fonction experience(p) renvoie 1 avec probabilité p dans le modèle.

10. Encadrer √2 par balayage

Algorithme du programme
def encadrement_racine2(n):
    pas = 10**(-n)
    x = 0.0
    while (x + pas)**2 <= 2:
        x = x + pas
    return x, x + pas

Pour n = 3, la fonction cherche deux décimaux consécutifs au millième encadrant 2. Les calculs flottants pouvant comporter de petites erreurs, on contrôle le résultat obtenu.

11. Approximer un extrémum par balayage

Exemple guidé
def f(x):
    return -2*x*x + 20*x

def maximum_balayage(a, b, pas):
    x = a
    meilleur_x = a
    meilleur_y = f(a)
    while x <= b:
        if f(x) > meilleur_y:
            meilleur_x = x
            meilleur_y = f(x)
        x = x + pas
    return meilleur_x, meilleur_y

Le résultat dépend du pas : un pas plus petit améliore en général la précision mais augmente le nombre de calculs. Il s'agit d'une approximation numérique, pas d'une preuve de l'extrémum exact.

12. Lire et déboguer un programme

Méthode de trace
  1. Identifier entrées, sorties et types.
  2. Suivre ligne par ligne la valeur des variables dans un tableau.
  3. Pour une boucle, vérifier les valeurs initiales, la condition et la mise à jour.
  4. Tester cas limite, cas ordinaire et entrée interdite.
  5. Comparer le résultat à un ordre de grandeur ou à un calcul manuel.
Exemple de bug
def est_pair(n):
    if n % 2 = 0:
        return True

Il y a deux problèmes : le test d'égalité s'écrit ==, et aucun résultat n'est renvoyé si n est impair. Correction :

def est_pair(n):
    return n % 2 == 0
Limite du programme

Il faut pouvoir lire et comprendre une fonction renvoyant une moyenne ou un écart type, mais aucune connaissance sur les listes n'est exigée en Seconde. Les structures de listes éventuellement rencontrées dans un programme fourni sont donc accompagnées et ne constituent pas une syntaxe à mémoriser.

Erreurs fréquentes
  • Utiliser = au lieu de == dans un test.
  • Oublier les deux points ou l'indentation après if, for, while ou def.
  • Croire que range(n) va de 1 à n.
  • Confondre affichage avec print et valeur renvoyée avec return.
  • Écrire une boucle while dont la condition ne peut jamais devenir fausse.
  • Ne tester qu'un seul exemple favorable.