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 :
mot = "Insertion"
for lettre in mot:
print(lettre)
Question
On considère le script ci-dessous :
mot = "Insertion"
compteur = 0
for lettre in mot:
if lettre == "i":
compteur += 1
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 :
Votre script a compté 4 't'
Solution
On imbrique deux boucles « Pour » :
compteur = 0
for mot in phrase:
for lettre in mot:
if lettre == 't':
compteur += 1
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).
Solution
negatives = 0
for semaine in fevrier:
for temperature in semaine:
if temperature < 0:
negatives += 1
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.
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.
Solution
effectifs = [0] * 4
for i in range(len(fevrier)):
semaine = fevrier[i]
for temperature in semaine:
if temperature < 0:
effectifs[i] += 1
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
.
Solution
def inversions(tableau):
total = 0
for i in range(len(tableau) - 1):
for j in range(i, len(tableau)):
if tableau[i] > tableau[j]:
total += 1
return total
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.
Solution
def plus_petits(tableau):
n = len(tableau)
bilan = [0] * n
for i in range(len(tableau) - 1):
for j in range(i + 1, len(tableau)):
if tableau[i] > tableau[j]:
bilan[i] += 1
return bilan