Très bien les garçons et les filles ici nous allons. Pour commencer, j'ai quelques questions à poser. Comme mon programme est vaste, je vais simplement poser des questions par étapes, cette question étant la première. Je crée un programme qui génère une table de vérité pour les expressions logiques postfixes. Voici les opérateurs autorisés et leurs équivalents logiques:Python dict en utilisant l'entrée logique pour les tables de vérité
Operators:
= Logical Equivalence (≡ or ↔)
`->` or `<=` Logical Implication (→)
+ Disjunction (∨), AKA “or”
* Conjunction (∧), AKA “and”
`~` or `!` Negation (¬), AKA “not”
Voici quelques exemples d'entrée et de sortie:
input
p True =
output
p p True =
False False
True True
input
p !
output
p p !
False True
True False
input
p q =
output
p q p q =
False False True
False True False
True False False
True True True
Ok je ne vraiment pas savoir où commencer, mais je suis ne demandant à personne d'écrire ce programme pour moi. Je sais que je dois écrire du code en utilisant un dict Python, qui correspond aux clés de la proposition correspondante. Mais comment puis-je savoir lesquels mettre pour les clés et lesquels mettre pour les valeurs? En outre, dans le cas de:
`->` or `<=` Logical Implication (→)
et
`~` or `!` Negation (¬), AKA “not”
Comment attribuer 2 entrées différentes pour pouvoir être utilisé dans un dict python? J'espère que ce n'est pas trop confus, je suis très noob à python, toute aide est appréciée. Je vous remercie!
MISE À JOUR Ok voici le code que j'ai maintenant:
propositions = {
'=' : (2, {(True, True): True,
(True, False): False,
(False, True) : False,
(False, False): True,
}),
'->' : (2, {(True, True): True,
(True, False): False,
(False, True): True,
(False, False): True,
}),
'+' : (2, {(True, True): True,
(True, False): True,
(False, True): True,
(False, False): False,
}),
'*' : (2, {(True, True): True,
(True, False): False,
(False, True): False,
(False, False): False,
}),
'!' : (1, {True: False,
False: True})}
prop = sys.stdin.readline()
prop = prop.split()
prop = prop[::-1]
for x in prop:
Je crois que je réussi à inverser la chaîne et enlevé tous les espaces blancs, mais je suis encore un peu confus sur itérer à travers elle.
MISE À JOUR DEUXIÈME Voici mon code:
propositions = {
'=' : (2, {(True, True): True,
(True, False): False,
(False, True) : False,
(False, False): True,
}),
'->' : (2, {(True, True): True,
(True, False): False,
(False, True): True,
(False, False): True,
}),
'+' : (2, {(True, True): True,
(True, False): True,
(False, True): True,
(False, False): False,
}),
'*' : (2, {(True, True): True,
(True, False): False,
(False, True): False,
(False, False): False,
}),
'!' : (1, {True: False,
False: True})}
prop = sys.stdin.readline()
prop = prop.strip().split()
prop = reversed(prop)
def evaluate():
token = next(prop)
try:
nargs, table = propositions[token]
except KeyError:
if token.lower() in ('true', '1'):
return True
elif token.lower() in ('false', '0'):
return False
else:
return token
return table[tuple(evaluate() for i in range(nargs))]
Merci beaucoup! – Coder117
Hey encore. Je crois que j'ai construit mon dict correctement, maintenant comment puis-je aller à lire la contribution? Je sais que je dois utiliser une pile. – Coder117
@ T.Dog Mise à jour du post. Vous devriez commencer. –