Ch. 01 · Leçon 1
Les structures de données : types et modules en Python et algorithmique
Ce que vous saurez faire
- →Identifier les types de données de base en algorithmique et en Python
- →Utiliser les fonctions arithmétiques prédéfinies (Ent, Arrondi, Racine carrée, Aléa)
- →Manipuler les chaînes de caractères avec les fonctions prédéfinies (Long, Pos, Majus, Sous-chaine, etc.)
- →Convertir des types de données (chaîne ↔ numérique, caractère ↔ code ASCII)
- →Résoudre des problèmes algorithmiques utilisant des chaînes et opérations numériques
id: 33-1525-structures-donnees-types-modules slug: 33-1525-structures-donnees-types-modules titre: 'Les structures de données : types et modules en Python et algorithmique' chapitre: 1 chapitre_titre: Les structures de données lecon: 1 niveau: 4eme-sci ordre: 1 prerequis: [] duree_estimee_min: 45 mots_cles:
- types de donnees
- modules
- chaines de caracteres
- python
- algorithme
- fonctions predefinies langages:
- analyse
- python objectifs:
- Identifier les types de données de base en algorithmique et en Python
- Utiliser les fonctions arithmétiques prédéfinies (Ent, Arrondi, Racine carrée, Aléa)
- Manipuler les chaînes de caractères avec les fonctions prédéfinies (Long, Pos, Majus, Sous-chaine, etc.)
- Convertir des types de données (chaîne ↔ numérique, caractère ↔ code ASCII)
- Résoudre des problèmes algorithmiques utilisant des chaînes et opérations numériques status: published source_pdf: 33_1525.pdf source_pages:
- 1
- 2
- 3
- 4
- 5 kind: cours
Les structures de données
Les types de données
En algorithmique comme en Python, toute variable possède un type qui détermine la nature des valeurs qu'elle peut contenir.
| Nom en algorithme | Nom en Python | Exemple (algorithme) |
|---|---|---|
| Entier | int | A ← 10 |
| Réel | float | X ← 5.5 |
| Booléen | bool | T ← vrai |
| Chaine | str | CH ← "bonjour" |
| Caractère | (n'existe pas, on utilise str) | C ← "#" |
Les modules : fonctions arithmétiques
Le tableau suivant récapitule les principales fonctions arithmétiques disponibles en algorithmique et leur équivalent Python.
Conversion en entier — Ent(x) / int(x)
r ← Ent(19.5) { r = 19 }
Résultat : entier
r ← Ent(19.5) { r = 19 }
Résultat : entier
r = int(13.2) # r = 13
Résultat : int
Arrondi — Arrondi(a) / round(a)
r ← Arrondi(3.8) { r = 4 }
Résultat : entier
r ← Arrondi(3.8) { r = 4 }
Résultat : entier
r = round(3.2) # r = 3
Résultat : int
Racine carrée — Racine carrée(a) / sqrt(a)
r ← Racine carrée(2) { r ≈ 1.4 }
Résultat : réel
r ← Racine carrée(2) { r ≈ 1.4 }
Résultat : réel
from math import *
r = sqrt(4) # r = 2.0
Résultat : float
Nombre aléatoire entier — Aléa(vi, vf) / randint(a, b)
r ← Aléa(10, 15) { ex. r = 14 }
Résultat : entier
r ← Aléa(10, 15) { ex. r = 14 }
Résultat : entier
from random import *
r = randint(10, 15) # ex. r = 11
Résultat : int
Nombre aléatoire réel — uniform(a, b)
from random import *
r = uniform(0, 5) # ex. r = 4.51 (float)
Les modules : chaînes de caractères
Accès à un caractère — Ch[i]
Ch = 'bonjour'
r = Ch[2] # r = "n" (3ème caractère en 0-indexed)
Sous-chaîne — Sous-chaine(ch, d, l) / Ch[d:f]
Ch ← "informatique"
r ← Sous-chaine(Ch, 2, 8)
{ r = "format" }
Ch ← "informatique"
r ← Sous-chaine(Ch, 2, 8)
{ r = "format" }
Ch = 'bonjour'
r = Ch[0:3] # r = "bon"
# équivalent : Ch[:3]
Longueur d'une chaîne — Long(ch) / len(ch)
Ch ← "informatique"
r ← Long(Ch) { r = 12 }
Résultat : entier
Ch ← "informatique"
r ← Long(Ch) { r = 12 }
Résultat : entier
ch = "bonjour"
l = len(ch) # l = 7
Résultat : int
Position d'une sous-chaîne — Pos(ch2, ch1) / Ch1.find(ch2)
L'indexation commence à 0. Retourne −1 si la sous-chaîne n'est pas trouvée.
Ch ← "bonjour"
r ← Pos("o", Ch) { r = 1 }
Ch ← "bonjour"
r ← Pos("o", Ch) { r = 1 }
Ch1 = "Cours python"
Ch2 = "python"
r = Ch1.find(Ch2) # r = 6
Ch3 = "Python"
r = Ch1.find(Ch3) # r = -1
Majuscules — Majus(ch) / ch.upper()
Ch ← "salut"
r ← Majus(Ch) { r = "SALUT" }
Ch ← "salut"
r ← Majus(Ch) { r = "SALUT" }
ch = "bonjour"
r = ch.upper() # r = "BONJOUR"
Conversion nombre → chaîne — convch(nb) / str(nb)
Nb ← 12.35
r ← convch(Nb) { r = "12.35" }
Nb ← 12.35
r ← convch(Nb) { r = "12.35" }
nb = 1235
r = str(nb) # r = "1235"
Conversion chaîne → nombre — Valeur(ch) / int(ch), float(ch)
Ch ← "2022"
r ← Valeur(Ch) { r = 2022 }
Ch ← "10.5"
r ← Valeur(Ch) { r = 10.5 }
Ch ← "2022"
r ← Valeur(Ch) { r = 2022 }
Ch ← "10.5"
r ← Valeur(Ch) { r = 10.5 }
ch = "12"
r = int(ch) # r = 12
ch = "12.36"
r = float(ch) # r = 12.36
ch = "12.36"
r = int(ch) # ERREUR
Code ASCII — Ord(car) / ord(car) et Chr(x) / chr(x)
r = ord("A") # r = 65
r = ord("a") # r = 97
r = chr(65) # r = "A"
r = chr(48) # r = "0"
Effacement — Efface(ch, d, f)
Cette fonction n'existe pas directement en Python. L'indice f est exclu.
Ch ← "maison"
r ← Efface(Ch, 1, 4) { r = "mon" }
Test numérique — Estnum(ch) et ch.isdigit()
Estnum(ch)(algorithme) : retourne vrai si la chaîne représente un entier ou un réel.ch.isdigit()(Python) : retourne vrai uniquement pour les entiers.
Ch ← "123"
r ← Estnum(Ch) { vrai }
S ← "13.25"
r ← Estnum(S) { vrai }
T ← "12/25A"
r ← Estnum(T) { faux }
Ch ← "123"
r ← Estnum(Ch) { vrai }
S ← "13.25"
r ← Estnum(S) { vrai }
T ← "12/25A"
r ← Estnum(T) { faux }
ch = "123"
ch.isdigit() # True
ch = "12.3"
ch.isdigit() # False
Applications
Un caissier dispose dans sa caisse des billets de 10 dinars, des billets de 5 dinars et des pièces de 1 dinar.
Écrire un algorithme qui permet d'échanger le montant S d'un chèque donné (exprimé en dinars) par le maximum de billets de 10 dinars, puis le reste en billets de 5 dinars et pièces de 1 dinar.
Exemple : pour un chèque de 428 dinars → 42 billets de 10 dinars, 1 billet de 5 dinars et 3 pièces de 1 dinar.
Voir le corrigé
Analyse / décomposition pour S = 428 :
- 428 DIV 10 = 42 billets de 10
- (428 MOD 10) = 8 ; 8 DIV 5 = 1 billet de 5
- (428 MOD 10) MOD 5 = 3 pièces de 1
Algorithme :
Algorithme Caisse
Début
Écrire("Donner le montant du chèque : "), Lire(S)
a ← S DIV 10
b ← (S MOD 10) DIV 5
c ← (S MOD 10) MOD 5
Écrire("chèque ", S, " : ", a, " billets de 10 dinars, ",
b, " billets de 5 dinars et ", c, " pièces de 1 dinar")
Fin
TDO (Tableau de Déclaration des Objets) :
| Objet | Type / Nature |
|---|---|
| S, a, b, c | entiers |
| N° | Instruction | S | a | b | c |
|---|---|---|---|---|---|
| 01 | ··· | ? | ? | ? | ? |
| 02 | ··· | ? | ? | ? | ? |
| 03 | ··· | ? | ? | ? | ? |
| 04 | ··· | ? | ? | ? | ? |
Pour créer un compte sur un site, on demande de saisir :
- L'adresse e-mail
- Le nom de la ville
- Le code postal formé de 4 chiffres
Le site crée un code de sécurité en additionnant :
- La somme (millier + unité du code postal) au carré.
- Le code ASCII de la dernière lettre de la ville multiplié par la longueur de la ville.
- Le code ASCII de la première lettre du serveur de l'adresse mail (lettre située juste après le
@). - Un nombre aléatoire composé de 3 chiffres.
Exemple : Mail = "mouna@gmail.fr", code postal = 4071, ville = "sousse" → code de sécurité = 935
Détail du calcul :
- Code ASCII de
'g'(1ʳᵉ lettre du serveur) = 103 - (4 + 1) = 5 ; 5² = 25
- Longueur("sousse") × ord('e') = 6 × 101 = 606
- Nombre aléatoire supposé = 201
- Total : 103 + 25 + 606 + 201 = 935 ✓
Écrire l'algorithme et le TDO du programme qui saisit l'adresse e-mail, la ville et le code postal, puis crée et affiche le code de sécurité.
Voir le corrigé
Algorithme :
Algorithme Compte
Début
Écrire("Donner le mail : "), Lire(adr)
Écrire("Donner le code postal : "), Lire(c)
Écrire("Donner la ville : "), Lire(v)
p ← Pos("@", adr)
c1 ← Ord(adr[p+1])
c2 ← (c DIV 1000) + (c MOD 10)
c2 ← c2 * c2
c3 ← Long(v) * Ord(v[Long(v) - 1])
c4 ← Aléa(100, 999)
code ← c1 + c2 + c3 + c4
Écrire("Le code de sécurité est : ", code)
Fin
TDO :
| Objet | Type / Nature |
|---|---|
| adr, v | chaîne |
| c, p, c1, c2, c3, c4, code | entier |
Explications clés :
p ← Pos("@", adr)localise l'arobase dans l'adresse mail.adr[p+1]donne le premier caractère du serveur (juste après le@).(c DIV 1000)extrait le chiffre des milliers du code postal ;(c MOD 10)extrait le chiffre des unités.v[Long(v) - 1]désigne le dernier caractère de la ville (les indices commencent à 0).
Quiz : modules Python et chaînes de caractères
Vérifiez votre maîtrise des modules de chaînes en Python et de leur équivalent en algorithmique.
Quiz (5 questions)
En Python, le premier caractère d'une chaîne `ch = "bonjour"` est :
Que retourne `ch[2:6]` si `ch = "informatique"` ?
Quelle est la fonction Python pour convertir une chaîne en majuscules ?
Quel module Python utilise-t-on pour `randint(a, b)` ?
Que retourne `len(\"bac 2025\")` ?