TDC1 : les conditions IF ... ELSE (Correction)¶
L'objectif de ce notebook est de revoir assez rapidement la notion de condtion (test : si .... alors ... sinon ...)
1. Tests simples¶
La syntaxe en python est plutôt naturelle :
!!! note Tests simples
if condition :
bloc d'instructions
else :
bloc d'instructions
!!!
Remarque : la partie "sinon" (else) est facultative.
Exercice 1
Q1. Essayer d'exécuter le programme suivant avec diverses valeurs de n1 et de n2 et dire que est son rôle :
Réponse : Le rôle du programme suivant est d'afficher le plus petit en premier.
n1 , n2 = 4, 5
if n1 > n2 :
n1, n2 = n2, n1
print(n1,n2)
!!! info Information : permuter deux variables
Pour comprendre le code précédent, on rappelle que la double affectation n1, n2 = n2, n1
permute le contenu des deux variables.
On aurait aussi pu utiliser une variable auxilaire ainsi :
aux = n1
n1 = n2
n2 = aux
!!!
Q2. On peut améliorer un peu le code précédent en affectant des entiers aléatoirement à n1 et n2. (On expliquera en détail le rôle de la première ligne un peu plus tard..., pas besoin de s'en occuper pour l'instant !)
from random import randint
n1 , n2 = randint(0,100), randint(0,100)
if n1 > n2 :
n1 , n2 = n2, n1
print(n1,n2)
31 93
Exécuter plusieurs fois le programme précédent pour voir si votre réponse à la question 1 se confirme.
Q3. Compléter le programme ci-dessous pour qu'il fasse la même chose que le programme de la question 2
from random import randint
n1 , n2 = randint(0,100), randint(0,100)
if n1 < n2 :
print("n1=",n1,"n2=",n2)
else :
print("n2=",n2,"n1=",n1)
n2= 76 n1= 82
2. Tests imbriqués¶
On peut imbriquer plusieurs tests de la façon suivante :
!!! note Tests imbriqués
if condition 1 :
bloc d'instructions 1
elif condition 2 : # cela signifie 'sinon si ...'
bloc d'instructions 2
...
elif condtion n :
bloc d'instructions n
else :
bloc d'instructions
!!!
Remarque : chaque bloc d'instructions
peut lui-même contenir des if
.
Exercice 2
Q4. Compléter le programme ci-dessous qui doit afficher le plus grand des trois nombres n1, n2 et n3 qui ont été choisis aléatoirement entre 1 et 20
L'utilsation de la fonction max(...)
est interdite dans cette question
from random import randint
n1 , n2 , n3 = randint(1,20), randint(1,20), randint(1,20)
print(n1,n2,n3) #pour voir les 3 nombres
if n1 > n2 :
if n1 > n3 :
m = n1
else :
m = n3
else :
if n2 > n3 :
m = n2
else :
m = n3
print(f"Le plus grand nombre est : {m}")
16 9 19 Le plus grand nombre est : 19
Q5. La technique utilisée précédemment est-elle facile à généraliser à 4 nombres ?
Réponse : pas évident car beaucoup de tests à faire !
3. Avec des opérateurs logiques¶
!!! info Opérateurs logiques pour les conditions
On a vu dans le cours comment faire des comparaisons avec <,>,==,!= etc... On peut également utiliser les opérateurs logiques and
et or
pour affiner les tests.
!!!
!!! info Compléments : la fonction input
Pour que le programme demande à l'utilisateur de saisir une valeur on peut utiliser la fonction input
de la façon suivante :
rep = input("Entrer une valeur : ")
Ceci va ouvrir afficher le message et attendre que l'utilisateur saisisse quelque chose au clavier, puis une fois la saisie validée par la touche enter
le programme stockera la saisie dans la variable rep
. Il est important de noter que cette variable sera automatiquement de type str
(chaîne de caractères). Si l'on veut récupérer des nombres il faudra la convertir avec l'une des commandes :
rep = int(rep)
rep = float(rep)
!!!
Exercice 3
Q6. Compléter le programme ci-dessous qui doit demander un nombre entier à l'utilisateur et afficher s'il est pair ou impair.
rep = input("Entrer un nombre entier:")
rep = int(rep)
if rep%2 == 0 :
print(rep,' est un nombre pair')
else :
print(rep,' est un nombre impair')
Entrer un nombre entier:12 12 est un nombre pair
Exercice 4
Q7. Compléter le programme ci-dessous qui doit demander un nombre entier à l'utilisateur et afficher s'il est divisible par 3 et 7 en même temps. tester et constater que s'il est divisible par 3 et 7 il l'est aussi par 21=3*7. Faire plusiseurs saisie et dire ce que vous remarquez...
rep = input("Entrer un nombre entier:")
rep = int(rep)
a = 3
b = 7
if rep%a == 0 and rep%b == 0 :
print(f'{rep} est divisible par {a} et {b} en même temps')
else :
print(f"{rep} N'est PAS divisible par {a} et {b} en même temps")
if rep%(a*b) == 0 :
print(f'{rep} est divisible par {a*b}')
else :
print(f"{rep} N'est PAS divisible par {a*b}")
Entrer un nombre entier:21 21 est divisible par 3 et 7 en même temps 21 est divisible par 21
Q8. Même question avec la divisibilité par 4 et 6 en même temps, et voir s'il est toujours divisible par 24=4*6
rep = input("Entrer un nombre entier:")
rep = int(rep)
a = 4
b = 6
if rep%a == 0 and rep%b == 0 :
print(f'{rep} est divisible par {a} et {b} en même temps')
else :
print(f"{rep} N'est PAS divisible par {a} et {b} en même temps")
if rep%(a*b) == 0 :
print(f'{rep} est divisible par {a*b}')
else :
print(f"{rep} N'est PAS divisible par {a*b}")
Entrer un nombre entier:12 12 est divisible par 4 et 6 en même temps 12 N'est PAS divisible par 24
Exercice 5
Q9. Insérer une celle ci-dessous et y écrire un programme qui demande à l'utilisateur de saisir un caractère, puis qui affiche si ce caractère est une voyelle, une consonne ou autre chose (penser à gérer les minuscules et majuscules...)
rep = input("Entrer une lettre de l'alphabet:")
voyelles = ['a','e', 'i', 'o','u','y']
if rep in voyelles :
print("Vous avez tapé une voyelle")
else :
print("Vous avez tapé un consonne")
# Remarque 1 : on peut chercher à gérer les majuscules par exemple
# Remarque 2 : on peut aussi essayer de tester si on a bien tapé une lettre (pas un chiffre ou autre chose...)
Entrer un caractère:b Vous avez tapé un consonne
Exercice 6
Q10. Insérer une celle ci-dessous et y écrire un programme qui demande à l'utilisateur de saisir un chiffre entre 1 et 7, puis qui affiche jour de la semaine correspondant (Pensez à gérer le cas où la donnée serait invalide !)
rep = input("Entrer un nombre entier entre 1 et 7: ")
rep = int(rep)
semaine = [ 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche']
if 1 <= rep <= 7 :
print('vous avez choisi le ',semaine[rep-1])
else :
print('saisie invalide, on attend un entier entre 1 et 7')
Entrer un nombre entier entre 1 et 7:0 saisie invalide, on attend un entier entre 1 et 7
Exercice 7
Q11. Insérer une celle ci-dessous et y écrire un programme qui demande à l'utilisateur de saisir une année, puis qui affiche si elle est bissextile ou non. On rappelle qu'une année bissextile est une année spéciale contenant un jour supplémentaire, soit un total de 366 jours dans une année. Une année est considérée comme une année bissextile si l'année est exactement divisible par 4 mais non divisible par 100. L'année est également une année bissextile si elle est exactement divisible par 400.
rep = input("Entrer un nombre entier représentant une année : ")
rep = int(rep)
if rep%4==0 and rep%100!=0 or rep%400==0 :
print("Année bissectile")
else :
print('Année non bissectile')
Entrer un nombre entier représentant une année : 1900 Année non bissectile
Exercice 8
Q10. Insérer une celle ci-dessous et y écrire un programme qui demande à l'utilisateur de saisir successivement 3 nombres a, b et c. Ces trois nombres représentent le trinôme $ax^2+bx+c$. Le programme doit ensuite afficher les racines réelles de ce trinôme.
print("On cherche les racines réelles du trinôme ax^2+bx+c")
a = float(input("Entrer a : "))
b = float(input("Entrer b : "))
c = float(input("Entrer c : "))
import math # pour avoir la fonction racine carrée :sqrt(...)
delta = b**2-4*a*c
if delta < 0 :
print(f'pas de racines pour {a}x^2+{b}x+{c}')
elif delta == 0 :
print(f'1 racines pour {a}x^2+{b}x+{c} : x0= {-b/(2*a)}')
else :
print(f'2 racines pour {a}x^2+{b}x+{c} : x1= {(-b-math.sqrt(delta))/(2*a)} et x2= {(-b+math.sqrt(delta))/(2*a)}')
On cherche les racines réelles du trinôme ax^2+bx+c Entrer a : 1 Entrer b : 1 Entrer c : -1 2 racines pour 1.0x^2+1.0x+-1.0 : x1= -1.618033988749895 et x2= 0.6180339887498949
Q11. Si cela n'a pas encore été fait, pour vous entrainer, aller sur la page instructions conditionnelles de coding game et faire les parties 1, 2 et 3 (répondre au QCM)