Boucles imbriquées⚓︎
Compter des lettres dans un mot⚓︎
En Python, les chaînes de caractères peuvent être parcourues comme les tableaux. Il est en particulier possible d'épeler un mot en parcourant les caractères de la chaîne :
Question
On considère le script ci-dessous :
Que vaut compteur
à l'issue de ce code ?
Solution
On parcourt les lettres de la chaîne mot
. Pour chacune on vérifie si c'est un 'i'
. Si c'est le cas, la variable est incrémentée. Comme il n'y a qu'un seul 'i'
dans mot
(la casse est importante), compteur
vaut 1
à l'issue du code.
Compter des lettres dans une phrase⚓︎
Considérons désormais le problème suivant : nous avons réussi à récupérer l'ensemble des mots d'un texte dans un tableau. Chaque élément du tableau est un mot, la ponctuation a été supprimée.
Par exemple, phrase = ["Cette", "page", "traite", "des", "boucles", "imbriquées"]
.
On souhaite compter le nombre de 't'
présents dans la phrase initiale.
On peut donc :
- initialiser une variable
compteur
, - lire chaque
mot
dephrase
, - lire chaque
lettre
de chaquemot
et vérifier si c'est un't'
ou non.
Compter les 't'
Compléter le script ci-dessous permettant de compter les 't'
dans phrase
.
On attend :
Les températures au Puy de Sancy⚓︎
On fournit le tableau ci-dessous contenant le relevé des températures à 7 h du matin enregistrées au Puy de Sancy (département du Puy de Dôme) lors du mois de février 2022.
fevrier = [
[-1, 4, 1, 0, -1, -1, 0],
[-2, 2, 3, -2, -5, 0, 3],
[0, 4, 4, 5, 1, 1, 2],
[0, 5, 3, -3, -3, -1, 0],
]
Les relevés sont regroupés en semaines : il y a 4 semaines contenant chacune 7 températures.
Compter les températures négatives dans le mois
Compléter le script ci-dessous permettant de compter les températures strictement négatives (il y en a 9).
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Compter les températures négatives par semaine
On souhaite désormais compter le nombre de températures strictement négatives par semaine. Les résultats seront stockés dans un tableau effectifs
contenant initialement quatre 0.
Compléter le script ci-dessous permettant de compter les températures strictement négatives par semaine.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Astuce
Il faut garder trace de l'indice de la semaine étudiée. Par contre, il ne sert à rien de garder trace de l'indice du jour.
Compter les inversions⚓︎
Nous avons vu précédemment une méthode permettant de mélanger un tableau. Il est possible de mesurer le « désordre » d'un tableau en comptant ses inversions.
Une inversion est un couple d'indices i
et j
(i
strictement inférieur à j
) tel que tableau[i]
est strictement supérieur à tableau[j]
.
Par exemple, le tableau [3, 8, 1]
compte deux inversions : les couples d'indices (0, 2)
et (1, 2)
.
Il est possible de compter les inversions dans un tableau en imbriquant deux boucles :
- la boucle principale parcourt tous les indices
i
jusqu'à l'avant-dernier inclus, - la boucle imbriquée parcourt les indices allant de
i + 1
jusqu'à la fin du tableau.
Au sein de ces deux boucles, on compare les valeurs des éléments correspondants.
La fonction inversions
Compléter la fonction inversions
ci-dessous permettant de compter les inversions présentes dans tableau
.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
La fonction plus_petits
Compléter la fonction plus_petits
ci-dessous permettant de compter le nombre d'inversions concernant chaque élément, c'est à dire, le nombre de valeurs situées après cet élément et qui lui sont strictement inférieures.
Par exemple pour le tableau [3, 8, 1]
on obtiendra [1, 1, 0]
car :
3
possède un seul élément qui lui est strictement inférieur à sa droite,8
possède un seul élément qui lui est strictement inférieur à sa droite,1
ne possède aucun élément qui lui est strictement inférieur à sa droite.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)