= 12
a
# Simple if
if a > 5:
print("la variable a({}) est strictement supérieure à 5".format(a))
Tests et Boucles
Avant de commencer
- Téléchargez ce notebook Jupyter
- Connectez-vous au Jupyter ENSAI avec id et mot de passe
- ou une autre plate-forme (SSPCloud, Jupyter Lab, Google Colab, Kaggle…)
- Importez le fichier .ipynb
1 Structures condionnelles et boucles
Dans ce Notebook, nous allons aborder les thèmes suivants :
- les structures if, else
- la boucle for
- la boucle while
- les instructions break et continue
2 Structures conditionnelles
Nous allons tester différentes conditions booléennes (voir Notebook 1) en utilisant les mots clés : if, else et elif.
Le principe est le suivant :
if condition1:
# Bloc de code à exécuter si la condition1 est vraie
elif condition2:
# Bloc de code à exécuter si la condition1 est fausse et condition2 est vraie
else:
# Bloc de code à exécuter si la condition1 et 2 sont fausses
Remarques :
- il peut y avoir autant de elif que nécessaire (entre 0 et infini)
- le else est facultatif
Attention : Il est important de respecter la syntaxe, en particulier l’indentation !
= 3
a
# if else
if a > 5:
print("la variable a({}) est strictement supérieure à 5".format(a))
else:
print("la variable a({}) est inférieure ou égale à 5".format(a))
= 750
nb_habitants
if nb_habitants < 500:
print("village")
elif nb_habitants < 10000:
print("ville")
else:
print("grande ville")
# Conditions multiples
= 14
note_maths = 20
note_info = True
validation_anglais
if note_maths > 10 and note_info > 10 and validation_anglais:
print("Année validée")
# Conditions en cascade
if note_maths > 10:
if note_info > 10:
if validation_anglais:
print("Félicitation, continuez comme ça !")
else:
print("Work harder")
else:
print("il y a 10 types de personnes, ceux qui sont bons en info et les autres")
else:
print("1+1=2")
3 Boucles
Les boucles sont utiles pour répéter de nombreuses fois la même opération.
Par exemple si l’on souhaite afficher tous les éléments d’une liste, écrire autant de print qu’il y a d’éléments serait assez pénible.
Comme pour les structures conditionnelles, il est très important de respecter l’indentation !
3.1 La boucle for
Il y a plusieurs manières d’utiliser la boucle for, voici quelques exemples.
Il est très fréquent d’utiliser avec les boucles la méthode range(start, stop, step) qui génére une suite d’entiers
- start : Valeur de départ de la séquence (optionnelle). Par défaut, elle est définie à 0.
- stop : Valeur de fin de la séquence (exclue).
- step : Pas d’incrément (optionnel). Par défaut, il est défini à 1.
# Afficher les entiers entre 1 et 6
for i in range(1, 6):
print(i)
for i in range(6):
print(i, i ** 2, sep="\t")
# Parcours d'une liste
= ["Luke", "Leia", "Han", "Obi-Wan"]
personnages
for p in personnages:
print("Hello " + p)
# Parcours d'une liste par indice
for i in range(len(personnages)):
print("Personnage " + str(i) + " : " + personnages[i])
La fonction enumerate() est utilisée pour itérer simultanément sur les indices et les éléments.
Elle permet de générer un tuple(indice, élément)
list(enumerate(personnages))
# Parcours d'une liste en utilisant enumerate
for numero, nom in enumerate(personnages):
print("Personnage " + str(numero) + " : " + nom)
# Parcours d'une chaîne de caractères
for char in "Dark Vador":
print(char, end=" - ")
import time
= "Salut les lapinous"
message for i in range(len(message)):
0.5)
time.sleep(print(message[i], end="")
= {'sucre': '100g', 'poire': 2, 'lait': '1L', 'sel': True}
ingredients
# Parcours des clés d'un dictionnaire
for cle in ingredients:
print(cle)
3.2 La boucle while
Le principe de la boucle while est le suivant :
- une condition d’entrée dans la boucle est définie
- tant que la condition est vérifiée, le code dans la boucle est exécuté
- et ainsi de suite, jusqu’à ce que l’on sorte de la boucle (ou que l’on reste coincé dedans à tout jamais…)
= 5
cpt while cpt >= 0:
print(cpt, end="...")
-= 1 # cpt = cpt - 1
cpt print("Boom")
= input("Entrez un nombre pair : ")
user_input while int(user_input) % 2 != 0:
print("Ce n'est pas un nombre pair.")
= input("Entrez un nombre pair : ")
user_input print("Merci, vous avez entré un nombre pair.")
Critère d’arrêt
La différence principale avec la boucle for est le critère d’arrêt.
Dans une boucle for, ce critère est clair : la boucle itère sur les éléments d’un objet itérable, nécessairement de taille finie.
Au contraire, dans la boucle while, ce critère peut ne jamais se réaliser et l’on se retrouve alors dans une boucle infinie…
Par exemple si l’on se trompe dans le nom des indices, voici le résultat :
# Utilisez le bouton "Stop" (carré noir) de Jupyter pour arrêter le programme en cours
= 1
i = 1
j while i <= 5:
= j + 1 j
Comme i = 1
et ne change jamais, la condition i <= 5
est toujours égale à True
print(i)
print(j)
3.3 L’instruction break
Une autre possibilité pour sortir d’une boucle for ou while est d’utiliser l’instruction break.
Le code ci-dessous montre une utilisation de cette instruction :
- On rentre dans une boucle infinie (
While true
) - Le seul moyen d’en sortir est de trouver le bon nombre, ce qui nous envoie vers le
break
Le code contient également des instructions try
et except
qui gérent le cas ou la valeur saisie n’est pas numérique.
Remarque : en cas de boucles imbriquées, le break ne met fin qu’à la boucle de niveau supérieur.
import random
= random.randint(1, 20)
nombre_aleatoire
print("Entrez un nombre entre 1 et 20")
while True:
= input()
nombre_saisi try:
= int(nombre_saisi)
nombre_saisi if nombre_saisi == nombre_aleatoire:
break
elif nombre_saisi < 1 or nombre_saisi > 20:
print("Entre 1 et 20 !!!")
elif nombre_saisi > nombre_aleatoire:
print("c'est moins")
elif nombre_saisi < nombre_aleatoire:
print("c'est plus")
except ValueError:
print("Veuillez entrer un entier valide")
print("Félicitations, vous avez trouvé le nombre secret :", nombre_aleatoire)
3.4 L’instruction continue
L’instruction continue permet de passer à l’itération suivante de la boucle.
Dans l’exemple ci-dessus :
- on rentre dans une boucle infinie
- tant que l’on ne rentre pas le bon prénom, on recommence au début de la boucle
- puis on ne sort de la boucle que lorsque l’on a rentré le bon mot de passe
= "alice"
votre_prenom
while True:
print("Veuillez entrer votre prénom.")
= input()
prenom if prenom != votre_prenom:
continue
print("Veuillez entrer votre mot de passe.")
= input()
mdp if mdp == "123456":
break
print("Bienvenue " + votre_prenom)
4 Exercices
4.1 Exercice 1
Ecrire un programme qui calcule la somme des 10 premiers entiers au carré.
Ecrire un programme qui calcule la somme des 5 premiers entiers impairs au carré.
# Testez votre réponse dans cette cellule
# Remarque : avec Python il est possible parfois de condenser l'écriture
sum(i**2 for i in range(1,11) if i%2 == 1)
4.2 Exercice 2
Ré-écrivez le code ci-dessous à l’aide d’une boucle for.
Indice : explorez les différentes utilisations de la méthode range()
= 5
cpt while cpt >= 0:
print(cpt)
-= 1 # cpt = cpt - 1
cpt print("Boom")
# Testez votre réponse dans cette cellule
4.3 Exercice 3
Réécrivez la boucle for
suivante à l’aide d’une boucle while
.
= ['do', 're', 'mi', 'fa', 'sol', 'la', 'si']
gamme
for i, note in enumerate(gamme):
print("La note numéro " + str(i) + " de la gamme de do majeur est " + note)
# Testez votre réponse dans cette cellule
4.4 Exercice 4
Triez la liste ci-dessous à l’aide de 2 boucles for (sans utiliser de méthode toute faite de tri) :
liste = [34, 7, 20, 12, 50, 23, 16, 28, 6, 11, 19, 13, 26, 8, 9]
# Testez votre réponse dans cette cellule
4.5 Exercice 5
Ecrivez un programme permettant de calculer les 10 premiers termes de la suite de Fibonacci à l’aide d’une boucle for.
Même question avec une boucle while.
Rappel : La suite de Fibonacci se définit de la manière suivante :
- les deux premiers nombres sont 0 et 1
- chaque autre nombre de la suite s’obtient en additionnant les deux nombres qui le précèdent
# Testez votre réponse dans cette cellule
4.6 Exercice 6
Calculer le minimum et le maximum de la série de valeurs suivantes, sans utiliser les fonctions min
et max
de Python.
x = [8, 18, 6, 0, 15, 17.5, 9, 1]
# Testez votre réponse dans cette cellule
4.7 Exercice 7
À l’aide de boucles for et while, parcourez ce dictionnaire et affichez la moyenne de chaque élève.
= {
notes "Miranda" : [16, 5, 8, 12],
"Celestin" : [19, 1, 7, 10],
"Hypolyte" : [18, 3, 12],
"Josephine": [12, 15, 14, 14]
}
# Testez votre réponse dans cette cellule
4.8 Exercice 8
Calculer la moyenne et la variance de la série de valeurs suivantes, sans utiliser des fonctions déjà codées :
x = [8, 18, 6, 0, 15, 17.5, 9, 1]
Pour rappel, les formules sont :
- moyenne : \[\bar{x} = {\frac {1}{n}}\sum_{i=1}^{n}x_{i}\]
- variance : \[\sigma^2 = {\frac {1}{n}}\sum_{i=1}^{n} (x_{i}-\bar{x})^2\]
# Testez votre réponse dans cette cellule
# Pour vérifier vos résultats
import numpy as np
# Create an array of numbers
= [8, 18, 6, 0, 15, 17.5, 9, 1]
x
print("Mean : ", np.mean(x))
print("Variance : ", np.var(x))