Aller au contenu principal

Ch. 01 · Leçon 4

Fonctions prédéfinies : arithmétiques et chaînes

180 minanalyse · python
Affichage du code

Ce que vous saurez faire

  • Identifier les principales fonctions prédéfinies arithmétiques et sur chaînes
  • Utiliser les fonctions du module math et les méthodes de chaîne en Python 3
  • Choisir la fonction la plus appropriée pour un traitement donné
  • Combiner plusieurs fonctions prédéfinies dans un algorithme cohérent

Plan de cours

Ne réinventez pas la roue : 20 fonctions à connaître par cœur

Le langage met à votre disposition des fonctions prêtes à l'emploi pour les opérations courantes : racine carrée, arrondi, longueur d'une chaîne, conversion majuscule/minuscule… Les ignorer, c'est perdre du temps et introduire des bugs.

Concepts clés

  1. Une fonction prédéfinie est disponible immédiatement, sans avoir à l'écrire.
  2. Les fonctions arithmétiques essentielles : ABS, RACINE, CARRE, TRONC, ARRONDI, ALEA, MOD, DIV.
  3. Les fonctions sur chaînes essentielles : LONG, MAJUS, MINUS, SOUS-CHAÎNE, POSITION, CONCAT.
  4. En Python, certaines sont natives (len, abs), d'autres dans le module math (à importer).

Avant de commencer

  • Q1. Comment obtenez-vous la racine carrée de 16 en Python ?
  • Q2. Quelle est la longueur de la chaîne "informatique" ?
  • Q3. Que retourne ABS(-7) ?

1. Le contenu du cours

1.1 Pourquoi des fonctions prédéfinies ?

Considérez deux versions du même code :

# Version 1 — sans fonction prédéfinie
x = -3.7
if x < 0:
    val_abs = -x
else:
    val_abs = x

# Version 2 — avec abs()
val_abs = abs(-3.7)

La version 2 est plus courte, plus lisible et plus rapide. Voilà toute la raison d'être des fonctions prédéfinies.

1.2 Fonctions arithmétiques

AnalysePython 3DescriptionExemple
ABS(x)abs(x)Valeur absolueabs(-7)7
RACINE(x)math.sqrt(x)Racine carréemath.sqrt(16)4.0
CARRE(x)x ** 2 ou x * xCarré5 ** 225
TRONC(x)int(x) ou math.trunc(x)Partie entière (tronquée)int(3.7)3
ARRONDI(x)round(x)Arrondi au plus procheround(3.5)4
ALEA(a, b)random.randint(a, b)Entier aléatoire dans [a, b]random.randint(1, 6) → un dé
x MOD yx % yReste de division entière17 % 52
x DIV yx // yQuotient de division entière17 // 53

Exemple complet — Distance entre deux points

import math

x1, y1 = 1.0, 2.0
x2, y2 = 4.0, 6.0

distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
print("Distance =", round(distance, 2))   # 5.0

1.3 Fonctions sur chaînes de caractères

AnalysePython 3DescriptionExemple
LONG(ch)len(ch)Longueur de la chaînelen("bac")3
MAJUS(ch)ch.upper()Conversion en majuscules"abc".upper()"ABC"
MINUS(ch)ch.lower()Conversion en minuscules"ABC".lower()"abc"
SOUS-CHAÎNE(ch, d, n)ch[d:d+n]Extraire n caractères à partir de d"informatique"[0:5]"infor"
POSITION(ch, sous)ch.find(sous)Position de sous dans ch (ou -1)"abcdef".find("cd")2
CONCAT(ch1, ch2)ch1 + ch2Concaténation"info" + "matique""informatique"
CONVERTIR(ch)int(ch) ou float(ch)Chaîne → nombreint("42")42
CHAÎNE(n)str(n)Nombre → chaînestr(42)"42"

1.4 Combiner plusieurs fonctions

Exemple — Vérifier si un mot est un palindrome

mot = input("Mot : ").lower()   # ignorer la casse
inverse = mot[::-1]              # inversion par slicing
if mot == inverse:
    print("Palindrome")
else:
    print("Non palindrome")

Tests : kayak, radar, bonjour → palindrome, palindrome, non palindrome.

1.5 Trace — Compter les voyelles d'un mot

mot = "informatique"
voyelles = "aeiouyAEIOUY"
nb = 0

for c in mot:
    if c in voyelles:
        nb = nb + 1

print(f"{mot} contient {nb} voyelles")
Trace d'exécution
0 / 6
Instructioncnb
01···??
02···??
03···??
04···??
05···??
06···??

2. Exercices pratiques

Niveau Débutant — Type bac courant

Exercice 1facile
Périmètre et aire

Lire le rayon d'un cercle et afficher son périmètre (2 × π × r) et son aire (π × r²), arrondis à 2 décimales.

Voir le corrigé
import math

r = float(input("Rayon : "))
perimetre = 2 * math.pi * r
aire = math.pi * r ** 2

print("Périmètre =", round(perimetre, 2))
print("Aire =", round(aire, 2))

Test avec r = 5 : Périmètre = 31.42, Aire = 78.54.

Astuce. math.pi est plus précis que 3.14. Utilisez-le systématiquement.

Niveau Intermédiaire — Type bac difficile

Exercice 2moyen
Initiales d'un nom

Lire un nom complet (ex. "Salma Trabelsi Ben Ali") et afficher uniquement les initiales en majuscules séparées par des points, par exemple "S.T.B.A.".

Voir le corrigé
nom_complet = input("Nom complet : ")
mots = nom_complet.split()   # découpe sur les espaces

initiales = ""
for mot in mots:
    if len(mot) > 0:
        initiales = initiales + mot[0].upper() + "."

print("Initiales :", initiales)

Décomposition.

  1. split() sans argument découpe sur les espaces et ignore les espaces multiples.
  2. Pour chaque mot, on prend mot[0] (la première lettre, indice 0), on la passe en majuscule avec .upper(), on ajoute un ..

Test mental avec "Salma Trabelsi" (2 espaces) → ["Salma", "Trabelsi"]"S.T.".

Niveau Avancé — Hors bac (bonus)

Exercice 3difficile
Vérificateur de mot de passe

Écrire un programme qui lit un mot de passe et le valide selon les règles :

  • Longueur entre 8 et 16 caractères inclus,
  • Contient au moins une majuscule,
  • Contient au moins une minuscule,
  • Contient au moins un chiffre,
  • Ne contient aucun espace.

Afficher "Valide" ou la liste des règles violées.

Voir le corrigé
mdp = input("Mot de passe : ")

# Drapeaux (flags)
bonne_longueur = 8 <= len(mdp) <= 16
a_majuscule = False
a_minuscule = False
a_chiffre = False
pas_espace = True

for c in mdp:
    if c.isupper():
        a_majuscule = True
    elif c.islower():
        a_minuscule = True
    elif c.isdigit():
        a_chiffre = True
    if c == " ":
        pas_espace = False

# Construction du message
problemes = []
if not bonne_longueur:
    problemes.append(f"Longueur invalide ({len(mdp)} caractères, attendu 8-16)")
if not a_majuscule:
    problemes.append("Manque une majuscule")
if not a_minuscule:
    problemes.append("Manque une minuscule")
if not a_chiffre:
    problemes.append("Manque un chiffre")
if not pas_espace:
    problemes.append("Contient un espace interdit")

if len(problemes) == 0:
    print("Valide")
else:
    print("Invalide :")
    for p in problemes:
        print("  - " + p)

Cas de test :

EntréeSortie attendue
"Bac2026!"Valide
"motdepasse"Manque majuscule, manque chiffre
"Bac 2026"Contient un espace
"A1b"Longueur invalide (3 < 8)

Concept-clé : les drapeaux. Quand vous voulez détecter « au moins un » de quelque chose, initialisez un drapeau à False, mettez-le à True dès qu'une occurrence est trouvée. Ne sortez pas de la boucle (break) si vous devez détecter plusieurs types : laissez-la s'exécuter entièrement.

Méthodes Python utilisées :

  • c.isupper(), c.islower(), c.isdigit() → tests booléens sur un caractère
  • len(mdp) → longueur de la chaîne
  • f-string f"...{var}..." → formatage moderne (Python 3.6+)

⚠️ Erreurs fréquentes au bac

Avant le quiz, mémorisez ces pièges classiques qui font perdre des points :

  • Erreur 1. Oublier import math ou import random avant d'utiliser sqrt, floor, randint. Lève NameError.
  • Erreur 2. int("12.5") lève ValueError. Il faut d'abord float("12.5") puis int(...).
  • Erreur 3. Confondre math.floor(x) (vers le bas) et int(x) (tronque vers 0). Pour x = -3.7 : floor = -4, int = -3.
  • Erreur 4. random.randint(a, b) inclut b, contrairement à range(a, b) qui l'exclut. Source de hors-bornes classiques.

3. Quiz de vérification

Fonctions prédéfinies (5 questions)

1

Que retourne abs(-3.5) en Python ?

2

Pour utiliser math.sqrt, il faut :

3

Quelle est la longueur de la chaîne 'bac' ?

4

Quel est le premier indice valide pour 'informatique'[?] en Python ?

5

Que retourne 'Hello'.upper() ?


En résumé

Avant de passer au chapitre 2 (Structures de contrôle II), vérifiez que vous savez :

  • ✅ Identifier la fonction prédéfinie correspondant à un besoin (sans réécrire le code à la main),
  • ✅ Importer le module math ou random quand nécessaire,
  • ✅ Manipuler une chaîne par indice et par méthode (upper(), len(), find()),
  • ✅ Combiner 3+ fonctions dans un même algorithme.

Ces fonctions sont le vocabulaire de base : impossibles à éviter au bac, présentes dans tous les sujets.

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.