Exercices pour approfondir☘
Ces exercices doivent être utilisés pour approfondir votre maîtrise de la programmation. Ils sont parfois 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.61.py
,ProgA02.62.py
, etc... - Pour exécuter ce programme, il suffit de le sauvegarder puis
d'appuyer sur la touche
[F5]
.
ProgA02.61 - Fonction « xor »☘
-
Copiez, collez puis complétez le corps de la fonction
xor()
en respectant ses spécifications.
Vérifiez votre travail en effectuant un appel à cette fonction dans la console.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def xor(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a xor b >>> xor(True, True) False >>> xor(True, False) True >>> xor(False, True) True >>> xor(False, False) False """ pass ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
Remarque importante
Lister les quatre cas possibles en utilisant des instructions conditionnelles «
if
» marche, mais à ce stade de l'année, votre enseignant attend davantage de reflexion de votre part.Une solution
On utilise les propriétés du « ou exclusif » découvertes dans le cours :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
def xor(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a xor b >>> xor(True, True) False >>> xor(True, False) True >>> xor(False, True) True >>> xor(False, False) False """ if a == b: return False else: return True ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
-
En vous inspirant de l'exercice ProgA02.51, définissez dans le même programme la fonction
tableXor()
qui affiche la table de l'opérateur xor.Affichage après exécution
On doit obtenir l'affichage suivant :
>>> tableXor() False xor False = False False xor True = True True xor False = True True xor True = False
Une réponse
1 2 3 4 5 6 7
def tableXor(): """ Sortie: None - Affichage de la table du « ou » """ for a in (False, True): for b in (False, True): print(f"{a} xor {b} = {xor(a, b)}")
ProgA02.62 - Fonction « nand »☘
-
Copiez, collez puis complétez le corps de la fonction
nand()
en respectant ses spécifications.
Vérifiez votre travail en effectuant un appel à cette fonction dans la console.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def nand(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a nand b >>> nand(True, True) False >>> nand(True, False) True >>> nand(False, True) True >>> nand(False, False) True """ pass ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
Remarque importante
Lister les quatre cas possibles en utilisant des instructions conditionnelles «
if
» marche, mais à ce stade de l'année, votre enseignant attend davantage de reflexion de votre part.Une solution
On utilise la définition du « nand » découverte en TD, à savoir
a
nandb
= non(a
etb
) :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def nand(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a nand b >>> nand(True, True) False >>> nand(True, False) True >>> nand(False, True) True >>> nand(False, False) True """ return not(a and b) ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
-
En vous inspirant de l'exercice ProgA02.21, définissez dans le même programme la fonction
tableNand()
qui affiche la table de l'opérateur nand.Affichage après exécution
On doit obtenir l'affichage suivant :
>>> tableNand() False nand False = True False nand True = True True nand False = True True nand True = False
Une réponse
1 2 3 4 5 6 7
def tableNand(): """ Sortie: None - Affichage de la table du « nand » """ for a in (False, True): for b in (False, True): print(f"{a} nand {b} = {nand(a, b)}")
ProgA02.63 - Fonction « nor »☘
-
Copiez, collez puis complétez le corps de la fonction
nor()
en respectant ses spécifications.
Vérifiez votre travail en effectuant un appel à cette fonction dans la console.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def nor(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a nor b >>> nor(True, True) False >>> nor(True, False) False >>> nor(False, True) False >>> nor(False, False) True """ pass ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
Remarque importante
Lister les quatre cas possibles en utilisant des instructions conditionnelles «
if
» marche, mais à ce stade de l'année, votre enseignant attend davantage de reflexion de votre part.Une solution
On utilise la définition du « nor » découverte en TD, à savoir
a
norb
= non(a
oub
) :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
def nor(a, b): """ a, b – booléens Sortie: booléen – Résultat de « l'opération » a nor b >>> nor(True, True) False >>> nor(True, False) False >>> nor(False, True) False >>> nor(False, False) True """ return not(a or b) ##----- Mise en oeuvre des tests -----## if __name__ == "__main__": import doctest doctest.testmod()
-
En vous inspirant de l'exercice ProgA02.21, définissez dans le même programme la fonction
tableNor()
qui affiche la table de l'opérateur nor.Affichage après exécution
On doit obtenir l'affichage suivant :
>>> tableNor() False nor False = True False nor True = False True nor False = False True nor True = False
Une réponse
1 2 3 4 5 6 7
def tableNor(): """ Sortie: None - Affichage de la table du « nor » """ for a in (False, True): for b in (False, True): print(f"{a} nor {b} = {nor(a, b)}")
ProgA02.64 - Les gouverner toutes☘
Dans les exercices pour lesquels il a fallu afficher les tables de vérité, on peut constater que l'on écrit quasiment le même code, à l'opérateur près (et, ou, xor, nand, nor).
En programmation, il faut toujours éviter ce genre de répétition afin d'améliorer la maintenance du code sur le long terme. En effet, toute modification du rendu final de la table (par exemple) devra être corrigée dans chacune des versions...
On cherche donc maintenant à écrire une fonction générique nommée table()
, qui prend pour paramètre le nom d'une fonction correspondant à un opérateur binaire boolén puis qui affiche la table de vérité de cet opérateur.
Copiez, collez puis complétez les pointillés dans le code ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Exemple d'appel
>>> table(xor)
xor(False, False) = False
xor(False, True) = True
xor(True, False) = True
xor(True, True) = False
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Une meilleure solution
Un inconvénient dans la solution précédente est qu'on perd le nom de
la fonction dont on affiche la table. En Python, il est possible de
récupérer le nom de la fonction f()
à l'aide de la méthode
f.__name__
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|