Chapitre 2 Structures Conditionnelles

2.1 Activité 1: Expression booléenne

  • Une variable booléenne contient soit la valeur True soit la valeur False.
  • Une expression booléenne contient au moins un opérateur booléen sa valeur est vraie ou fausse.
  1. Relever dans ce programme les affectations et les expressions booléennes.
majeur = True
age = 18
age == 18
age < 18
age != 12
(majeur == True) or (age == 18)
age = 16
(majeur == True) and (age >= 18)
not majeur
age != 18
  1. Justifier la valeur de chaque expression booléenne.
  2. En modifiant les valeurs de a et b écrire la table de vérité de l’opérateur booléen or
a = True
b = False
a or b
  1. Complète le programme suivant afin que les expressions booléennes soient vraies:
a = 3
b = False
c = 5
(a ... c) or b
not ( a ... 3)
(... b) and ( a == ...) 
  1. L’opérateur booléen or est un ou inclusif. Dans l’expression a or b si a et b sont vraies alors l’expression est aussi vraie. On veut écrire une expression booléenne qui se comporte comme un ou exclusif c’est à dire en valant faux si a et b sont vraies. Par exemple: dans l’expression “fromage ou déssert ?” on ne valide pas le choix fromage ET déssert. Compléter le code ci-dessous.
fromage = False
dessert = False
# Expression booléeenne à écrire
  1. A l’aide de votre programme écrire la table de vérité de cette opérateur OU-Exclusif

2.2 Activité 2: Si … Alors

L’instruction IF permet d’exécuter un bloc d’insctrtions à la condition qu’une expression booléenne possède la valeur vrai. Par exemple:

expression_1 = True

if expression_1 :
  print("Bloc 1")
  expression_1 = False

print("Bloc 2")

if expression_1 :
  print("Bloc 3")

print("FIN")
  1. Recopie et test le programme ci-dessus.
  2. Explique et justifie ligne à ligne son exécution.
  3. Modifie le code suivant afin que le programme affiche “Accès autorisé” si l’age est supérieur ou égal à 18.
age = 15
if .... :
  print("Accès autorisé")
  1. Corriger les erreurs dans le programme suivant:
admin = True
age = 21
if (admin = True) and (age > 18)
print("Connecté en tant qu' ADMIN !")
  1. Un hôtel loue des chambres avec un tarif intéressant si on arrive pas trop tard. Plus on arrive tôt et moins on paye.
  • Le prix de la chambre est de 10 pièces à midi, et augmente de 5 pièces chaque heure après midi. Il est donc de 15 pièces à 13h, etc. Il ne peut cependant pas dépasser 53 pièces.
  • Dans votre programme, utilisez une variable nommée heure qui contient un entier représentant l’heure d’arrivée. heure vaut 0 si on arrive à midi, 1 si on arrive à 1h de l’après-midi, etc, 12 si on arrive à minuit.
  • Votre programme devra afficher le prix à payer correspondant à l’heure d’arrivée.

2.3 Activité 3: if.. elif..else

  1. Saisir et commenter en détail le programme suivant:
note = 11
if note >=10:
  print('Bonne note')
else: 
  print('Mauvaise note')
  1. Modifier le programme pour qu’il affiche “Mauvaise note.”
  2. Corriger l’erreur dans le programme suivant:
a = 12
if a >= 18:
  print('majeur')
else a<18:
  print('mineur')
  1. Compléter le programme suivant attribue une mention au bac.
  • Inférieur à 10: Recalé
  • Entre 10 et 12: Passable
  • Entre 12 et 14: Assez-bien
  • Entre 14 et 16: Bien
  • 16 et plus: Très bien
note = 15
if note >= 16:
  print('Très bien')
elif note >= 14: 
  print('Bien')
elif ... : 
  print('Assez-bien')
elif note >= 10:
  ....
else:
  ....
  1. Modifier le programme précédent en inversant l’odre des deux premiers tests conditionnels. Que se passe-t-il ? Justifie.
  2. Ecrire un programme qui affiche “pair” si la valeur de la variable n est paire et “impair” dans les autres cas. Pour savoir si un nombre est pair, on utilise le fait que le reste de la division par 2 de ce nombre vaut 0. On utilisera donc l’opérateur %.

2.4 Activité 4: Combinaisons de if, elif, else

  1. Prédire et expliquer la valeur de b après exécution du programme suivant:
a=2
b=0
if a<0:
    b=1
elif a>0 and a<5:
    b=2
else:
    b=3
  1. Commenter l’exécution du programme suivant:
x = -3
if x < 0:
  if x % 2 == 0:
    print('pair et négatif')
  else: 
    print('impair et négatif')
else:
    print("pair et c'est tout ce qui m'intéresse")
  1. Modifier le programme afin qu’il affiche pair et positif ou impair et positif si c’est le cas.
  2. Le programme suivant est buggé. On souhaite que lorsque l’utilisateur a plus de 18 ans et possède son code et le permis le programme affiche “vous pouvez conduire.” Modifiez légèrement le programme afin de fixer cette erreur.
age = 19
code = True
permis = True

if age >= 14:
    print('vous pouvez apprendre à conduire un scooter')
elif code == True and age >=18:
    if permis == True:
        print('vous pouvez conduire une voiture')
    else:
        print('vous pouvez apprendre à conduire une voiture')
## vous pouvez apprendre à conduire un scooter
  1. Ecrire un programme qui affiche la phrase “il va faire très froid / froid / frais / bon / un peu chaud / chaud / très chaud.” selon la valeur de la variable t représentant la température maximale prévue. Vous choisirez les seuils entre chaque niveau de température.

  2. Une année est bissextile si elle est divisible par 4. Cependant les siècles ne sont pas bissextiles, sauf les multiples de 400. Ecrire un programme qui affiche si une année est bisextile. Vérifiez que 2100 n’est pas bissextile contrairement à 2012.

  3. Plus loin: Ecrire une fonction qui reçoit une année et qui renvoie l’année si elle est bissextile et la chaine " " si elle n’est pas bissextile. En utilisant cette fonction écrire un script qui affiche toutes les années bissextiles entre 2000 et 2104.

2.5 Corrigés des activités

2.5.1 Activité 1

  1. Relever dans ce programme les affectations et les expressions booléennes.
majeur = True #affectation
age = 18 # affectation
age == 18 #exp booléenne
## True
age < 18 #exp booléenne
## False
age != 12 #exp booléenne
## True
(majeur == True) or (age == 18) #exp booléenne
## True
age = 16 #affectation
(majeur == True) and (age >= 18) #exp booléenne
## False
not majeur #exp booléenne
## False
age != 18 #exp booléenne
## True
  1. Justifier la valeur de chaque expression booléenne.
  • (majeur == True) or (age == 18) on décompose majeur == True est Vrai car majeur est vrai. idem pour age qui vaut effectivement 18. L’expression revient à True OR True. Au moins une des deux propositions est vraies dont l’expression est vrai.
  • (majeur == True) and (age >= 18) majeur est vrai donc majeur == True est vraie. age vaut 16 (ligne précédente) donc il n’est pas supérieur ou égal à 18. L’expression se ramène à vrai AND faux ce qui a pour valeur faux car pour que l’expression soit vraie il faut les deux vrai AND vrai.
  • not majeur renvoie la négation de majeur. La négation de True, c’est False.
  • age != 18 est vrai si la valeur de age n’est pas 18. Ce qui ici est vrai car age vaut 16.
  1. En modifiant les valeurs de a et b écrire la table de vérité de l’opérateur booléen or
a = True
b = False
a or b
## True
  1. Complète le programme suivant afin que les expressions booléennes soient vraies:
a = 3
b = False
c = 5
(a <  c) or b
## True
not ( a != 3)
## True
(not b) and ( a == 3) 
## True
  1. L’opérateur booléen or est un ou inclusif. Dans l’expression a or b si a et b sont vraies alors l’expression est aussi vraie. On veut écrire une expression booléenne qui se comporte comme un ou exclusif c’est à dire en valant faux si a et b sont vraies. Par exemple: dans l’expression “fromage ou déssert ?” on ne valide pas le choix fromage ET déssert. Compléter le code ci-dessous.
fromage = False
dessert = False
# Expression booléeenne à écrire
(fromage or dessert) and not(fromage and dessert)
## False
  1. A l’aide de votre programme écrire la table de vérité de cette opérateur OU-Exclusif

2.5.2 Activité 2

  1. /
expression_1 = True

if expression_1 : #si expression_1 est vrai alors
  print("Bloc 1") #affiche Bloc 1
  expression_1 = False #expression_1 prend la valeur Faux
## Bloc 1
print("Bloc 2") #affiche Bloc 2
## Bloc 2
if expression_1 : #Si application est vrai.. mais ici expression_1 vaut False donc on saute le bloc
  print("Bloc 3") #Pas exécuter car expression_1 est False

print("FIN") #Affiche Fin
## FIN
age = 15
if age >= 18 :
  print("Accès autorisé")
admin = True
age = 21
if (admin == True) and (age > 18):
  print("Connecté en tant qu' ADMIN !")
## Connecté en tant qu' ADMIN !
heure = 2
prix = 10 + 5 * heure
if prix > 53:
   prix = 53
print(prix)
## 20

2.5.3 Activité 3

note = 11
if note >=10:  #Si note >= 10 Alors Affiche "bonne note"
  print('Bonne note')
else:  #Sinon Alors Affiche "Mauvaise Note"
  print('Mauvaise note')
## Bonne note
  1. Modifier le programme pour qu’il affiche “Mauvaise note.”
note = 9
if note >=10:  #Si note >= 10 Alors Affiche "bonne note"
  print('Bonne note')
else:  #Sinon Alors Affiche "Mauvaise Note"
  print('Mauvaise note')
## Mauvaise note
  1. Corriger l’erreur dans le programme suivant:
a = 12
if a >= 18:
  print('majeur')
else : # Pas de condition après else
  print('mineur')
## mineur
  1. Compléter le programme suivant attribue une mention au bac.
  • Inférieur à 10: Recalé
  • Entre 10 et 12: Passable
  • Entre 12 et 14: Assez-bien
  • Entre 14 et 16: Bien
  • 16 et plus: Très bien
note = 17
if note >= 16:
  print('Très bien')
elif note >= 14: 
  print('Bien')
elif note >= 12 : 
  print('Assez-bien')
elif note >= 10:
  print('Passable')
else:
  print('Recalé')
  1. Modifier le programme précédent en inversant l’ordre des deux premiers tests conditionnels. Que se passe-t-il ? Justifie.
note = 17
if note >= 14: 
  print('Bien')
elif note >= 16:
  print('Très bien')
## Bien

La première condition étant vraie la seconde n’est pas exécutée. C’est pourquoi avec note = 15, le programme affiche “Bien” et non pas “Très Bien” alors que note >=16 est vraie. 6. Ecrire un programme qui affiche “pair” si la valeur de la variable n est paire et “impaire” dans les autres cas. Pour savoir si un nombre est pair, on utilise le fait que le reste de la division par 2 de ce nombre vaut 0. On utilisera donc l’opérateur %.

n = 13
if n % 2 == 0:
  print(f'{n} est un entier pair')
else:
  print(f'{n} est un entier impair')
## 13 est un entier impair

2.5.4 Activité 4

  1. Prédire et expliquer la valeur de b après exécution du programme suivant:
a=2
b=0
if a<0: #condition fausse
    b=1
elif a>0 and a<5: #condition vraie
    b=2 # b prend la valeur 2
else:
    b=3
  1. Commenter l’exécution du programme suivant:
x = -3
if x < 0: #condition vraie
  if x % 2 == 0: #sous condition fausse
    print('pair et négatif')
  else:  #on exécute le bloc qui suit le else
    print('impair et négatif')
else: #pas exécuté car if correspondant vrai
    print("pair et c'est tout ce qui m'intéresse")
## impair et négatif
  1. Modifier le programme afin qu’il affiche pair et positif ou impair et positif si c’est le cas.
x = 7
if x < 0: 
    if x % 2 == 0: 
        print('pair et négatif')
    else:  
        print('impair et négatif')
else: 
        if x % 2 == 0: 
            print('pair et positif')
        else:  
            print('impair et positif')
## impair et positif
  1. Le programme suivant est buggé. On souhaite que lorsque l’utilisateur a plus de 18 ans et possède son code et le permis le programme affiche “vous pouvez conduire.” Modifiez légèrement le programme afin de fixer cette erreur.
age = 19
code = True
permis = True

if age >= 14:
    print('vous pouvez apprendre à conduire un scooter')
elif code == True and age >=18:
    if permis == True:
        print('vous pouvez conduire une voiture')
    else:
        print('vous pouvez apprendre à conduire une voiture')
## vous pouvez apprendre à conduire un scooter
  1. Ecrire un programme qui affiche la phrase “il va faire très froid / froid / frais / bon / un peu chaud / chaud / très chaud.” selon la valeur de la variable t représentant la température maximale prévue. Vous choisirez les seuils entre chaque niveau de température.
t = 20
if t>30:
    mot = "très chaud"
elif t>25:
    mot = "chaud"
elif t>23:
    mot = "un peu chaud"
elif t>=20:
    mot = "bon"
elif t>17:
    mot = "frais"
elif t>10:
    mot = "froid"
else:
    mot = "très froid"
print(f"il va faire {mot} ")
## il va faire bon
  1. Une année est bissextile si elle est divisible par 4. Cependant les siècles ne sont pas bissextiles, sauf les multiples de 400. Ecrire un programme qui affiche si une année est bisextile.
a = 2012
if a % 4 == 0 :
    if ((a % 100) == 0) and not(a%400 ==0):
        print('année pas bissextile')
    else:
        print('année bissextile')
else:
    print('année pas bissextile')
## année bissextile