© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.
Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.
Portes logiques et expressions booléennes (corrigé)
Activité sur les booléens n°1
1. Portes logiques et booléens
2. Circuits combinatoires
3. Complément : un outil
1. Portes logiques et booléens
Le codage d'une information ou sa circulation se font à l'aide de courant électrique.
Deux tensions sont possibles : 1 (haute) et 0 (basse), qui correspondent respectivement aux valeurs booléennes True et False.
Une porte logique reçoit un ou plusieurs signaux en entrée et renvoie un signal en sortie selon une règle préétablie.
1.1. Dresser la table de vérité d'une porte logique consiste à recenser les valeurs obtenues en sortie en fonction des valeurs reçues en entrée.
$\quad\;\;$Recopier et compléter la table de vérité de la porte logique "et" ci-dessous :
1.2. Exécuter la cellule Python suivante, puis modifier/compléter pour vérifier l'ensemble de la table de vérité réalisée en 1.1.
# Exécuter/modifier cette cellule
e1 = True
e2 = True
s = e1 and e2
s
True
[ ((e1,e2),e1 and e2) for e1 in [False,True] for e2 in [False,True] ]
[((False, False), False), ((False, True), False), ((True, False), False), ((True, True), True)]
1.3. Dresser et compléter les tables de vérité des portes logiques "ou" et "non".
1.4. Effectuer des saisies Python pour vérifier ces tables de vérité.
# Effectuer ici les saisies Python
#TABLE OU
[ ((e1,e2),e1 or e2) for e1 in [False,True] for e2 in [False,True] ]
[((False, False), False), ((False, True), True), ((True, False), True), ((True, True), True)]
#TABLE NON
[ (e1, not e1 ) for e1 in [False,True] ]
[(False, True), (True, False)]
2. Circuits combinatoires
Les circuits combinatoires sont construits à partir de portes logiques élémentaires, qui sont en quelque sorte les briques élémentaires ces circuits.
2.1. On considère le circuit combinatoire noté Circuit1, donné ci-dessous. Dresser sa table de vérité.
$\quad\;\;$(on peut inclure des colonnes pour indiquer des valeurs intermédiaires)
2.2. Écrire une fonction Python Circuit1, qui :
#Écrire ici la fonction Circuit1
def Circuit1(e1,e2):
return not e1 and e2
2.3. La fonction Python Table_verite donnée ci-dessous renvoie la table de vérité d'un circuit combinatoire donné par une fonction Python.
$\quad\;\;$Exécuter les cellules suivantes pour vérifier les résultats de la question 2.1.
from itertools import product
from inspect import signature
def Table_verite(fonction_booleenne):
"""
renvoie la table d'une fonction booléenne sous forme d'un dictionnaire
À chaque tuple des valeurs booléennes en entrée est associé la(les) sortie(s) correspondante(s)
"""
#récupération du nombre d'arguments de la fonction booleenne
nbre_arguments = len (signature(fonction_booleenne).parameters)
#initialisation de la table
Table={}
#remplissage de la table : à chaque séquence de booléens possible...
for liste_bool in product( *([[False,True] for j in range(nbre_arguments)] )):
#...on fait correspondre le résultat de la fonction booléenne
Table[liste_bool] = fonction_booleenne(*liste_bool)
#renvoie la table
return Table
#Exécuter cet appel à la fonction Table_verite
Table_verite(Circuit1)
{(False, False): False, (False, True): True, (True, False): False, (True, True): False}
2.4. Pour chacun des circuits combinatoires donnés ci-dessous:
# Utiliser ces zones Python pour définir les fonctions et effectuer les appels à Table_verite
def Circuit2(e1,e2):
return not (e1 or e2)
Table_verite(Circuit2)
{(False, False): True, (False, True): False, (True, False): False, (True, True): False}
def Circuit3(e1):
return not not e1
Table_verite(Circuit3)
{(False,): False, (True,): True}
def Circuit4(e1,e2):
return not e1 or e2
Table_verite(Circuit4)
{(False, False): True, (False, True): True, (True, False): False, (True, True): True}
def Circuit5(e1,e2,e3):
return e1 or e2 , e2 and e3
Table_verite(Circuit5)
{(False, False, False): (False, False), (False, False, True): (False, False), (False, True, False): (True, False), (False, True, True): (True, True), (True, False, False): (True, False), (True, False, True): (True, False), (True, True, False): (True, False), (True, True, True): (True, True)}
def Circuit6(e1,e2,e3):
return (e1 or e2) and e3
Table_verite(Circuit6)
{(False, False, False): False, (False, False, True): False, (False, True, False): False, (False, True, True): True, (True, False, False): False, (True, False, True): True, (True, True, False): False, (True, True, True): True}
2.5. On considère le circuit combinatoire ci-dessous :
$\quad\;\;$a. Dresser sa table de vérité. Vérifier à l'aide de saisies Python.#Utiliser cette cellule pour la vérification de la question 2.5.a
# On retrouve la porte ET
def Circuit7(e1,e2):
return not (not e1 or not e2)
Table_verite(Circuit7)
{(False, False): False, (False, True): False, (True, False): False, (True, True): True}
# Cette fonction réalise le OU
def Circuit8(e1,e2):
return not (not e1 and not e2)
Table_verite(Circuit8)
{(False, False): False, (False, True): True, (True, False): True, (True, True): True}
2.6. On considère la porte " x-ou " ("x-or" , "ou exclusif") décrite ci-dessous :
#Cette fonction réalise le xor
def xor(e1,e2):
return (e1 and not e2) or (not e1 and e2) # alternative : (e1 or e2) and not (e1 and e2)
Table_verite(xor)
{(False, False): False, (False, True): True, (True, False): True, (True, True): False}
#Utiliser cette cellule pour la question 2.6.c
def xor_bis(e1,e2):
return e1^e2
Table_verite(xor_bis)
{(False, False): False, (False, True): True, (True, False): True, (True, True): False}
3. Complément : un outil
Dresser directement la table de vérité d'une expression sous forme str.
La fonction Table_description donnée ci-dessous permet d'obtenir la table de vérité d'une expression booléenne donnée directement sous forme de chaîne de caractère. Un exemple d'utilisation est fourni.
Attention : Pour éviter les bugs à la conversion, utiliser de préférence des variables nommées e1,e2,...
from itertools import product
def Table_description(liste_variables,operation_booleenne):
"""
Fonction qui renvoie la table de vérité sous forme d'un dictionnaire
liste_variables = ["e1","e2",...] liste des noms de variables utilisés
operation_booleene = "chaine de caractère (str) décrivant l'opération booléenne considérée"
"""
try:
#remplacement dans la chaîne de caractère des noms de variable par la syntaxe qui donnera la valeur de la variable
for k in range(len(liste_variables)):
operation_booleenne = operation_booleenne.replace(liste_variables[k],"valeur_var["+str(k)+"]")
#initialisation de la table
Table={}
#remplissage de la table : à chaque liste de booléens possible...
for valeur_var in product( *([[False,True] for j in range(len(liste_variables))] )):
#...on fait correspondre le résultat de la fonction booléenne
Table[valeur_var] = eval( operation_booleenne )
#renvoie la table
return Table
except:
return "saisie invalide"
# Exemple : Les variables se nomment e1,e2,e3 et l'expression évaluée est (e1 or e2) and e3
Table_description( ["e1","e2","e3"] , "(e1 or e2) and e3" )
{(False, False, False): False, (False, False, True): False, (False, True, False): False, (False, True, True): True, (True, False, False): False, (True, False, True): True, (True, True, False): False, (True, True, True): True}
© Copyright Franck CHEVRIER 2019-2021 https://www.python-lycee.com.
Les activités partagées sur Capytale sont sous licence Creative Commons.