Exercices d'entraînement☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés d'aide et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests donnés dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Rappels
- Chaque programme Python doit être sauvegardé sous forme de fichier texte
avec l'extension
.py
.
Enregistrez ce fichier dans le dossier[A02-Booléens]
avec le nom donné à l'exercice :ProgA02.51.py
,ProgA02.52.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer
sur la touche
[F5]
.
ProgA02.51 - Table du « et »☘
On présente ci-dessous comment établir la table de vérité de l'opérateur et avec Python.
Étudiez ce code puis exécutez l'appel tableEt()
dans la console afin de bien comprendre la table affichée.
1 2 3 4 5 6 7 |
|
Affichage après exécution
On obtient l'affichage suivant :
>>> tableEt()
False et False = False
False et True = False
True et False = False
True et True = True
ProgA02.52 - Table du « ou »☘
En vous inspirant de l'exercice ProgA02.51, définissez la fonction tableOu()
qui affiche la table de l'opérateur ou.
Affichage après exécution
On doit obtenir l'affichage suivant :
>>> tableOu()
False ou False = False
False ou True = True
True ou False = True
True ou True = True
Une réponse
1 2 3 4 5 6 7 |
|
ProgA02.53 - Table du « non »☘
En vous inspirant de l'exercice ProgA02.51, définissez la fonction tableNon()
qui affiche la table de l'opérateur non.
Affichage après exécution
On doit obtenir l'affichage suivant :
>>> tableNon()
non(False) = True
non(True) = False
Une réponse
1 2 3 4 5 6 |
|
ProgA02.54☘
-
Qu'obtient-on en entrant les instructions suivantes dans un interpréteur python ?
>>> ch = '' >>> ch[0] == 'a'
Une réponse
On obtient l'affichage d'une erreur bien sûr :
>>> ch = '' >>> ch[0] == 'a' IndexError: string index out of range
-
Qu'obtient-on en entrant les instructions suivantes dans un interpréteur python ?
>>> ch = '' >>> if len(ch) != 0 and ch[0] == 'a': ... print(ch) ... else: ... print("Bouh!")
Une réponse
On obtient l'affichage
Bouh!
. Cette réponse peut paraître étrange : pourquoi n'obtient-on pas une erreur ?>>> ch = '' >>> if len(ch) != 0 and ch[0] == 'a': ... print(ch) ... else: ... print("Bouh!") ... 'Bouh!'
Comme le test
(len(ch) != 0)
a pour valeurFalse
, une expression logique «(len(ch) != 0 )
et ... » vaudra nécessairementFalse
. Python n'évalue donc pas ce qui se trouve après l'opérateur « and » : l'erreurIndexError
n'a donc pas lieu.
ProgA02.55 - Problème de communication☘
Hugo voudrait afficher la valeur de x
lorsque x
vaut 1
ou lorsque x
vaut 0
, et afficher "Erreur"
lorsque x
ne vaut ni 0
, ni 1
.
Il écrit le code suivant :
1 2 3 4 5 6 7 8 9 |
|
-
Testez ce code et vérifiez qu'il ne convient pas.
Réponse du 1.
Ce code ne convient pas.
En effet, l'appelun_ou_zero(0)
affiche"Erreur"
:>>> un_ou_zero(1) 1 >>> un_ou_zero(0) 'Erreur'
-
Expliquez l'erreur faite par Hugo.
Réponse du 2.
Pour mieux comprendre ce qu'a écrit Hugo, ajoutons des parenthèses:
6
if (x == 1) or 0:
Le
or
, au lieu de porter sur deux booléens, porte d'un côté sur le booléenx == 1
et de l'autre sur le nombre 0.
Cela n'a, d'un point de vue logique, aucun sens !Il faut écrire :
6
if (x == 1) or (x == 0):
En effet,
or
est un opérateur entre deux booléens. -
Expliquez pourquoi Python ne renvoie pas une erreur.
Réponse du 3.
Pour comprendre pourquoi Python n'affiche pas d'erreur, on peut tester les instructions suivantes dans la console :
>>> 1 == 1 or 0 True >>> 1 == 0 or 0 0 >>> bool(0) False >>> 'a' == 'b' or 'c' 'c'
Python donne à
or
une signification qui n'est pas uniquement celle de la logique.Attention
Il vous est interdit en NSI d'utiliser
or
autrement qu'entre deux booléens. Toute autre utilisation sera considérée par le correcteur comme une erreur de codage de votre part.Vous pouvez vérifier sur quelques exemples que l'instruction
t = a or b
a la même valeur quet = (a if a else b)
.De même,
t = a and b
aura la valeur det = (a if not(a) else b)
.