好的男孩和女孩在这里我们去。首先,我有几个问题。由于我的计划很大,我只会分阶段提出问题,这个问题是第一个问题。我创建了一个为postfix逻辑表达式生成真值表的程序。下面是允许运营商和他们的逻辑等价物:Python字典使用真值表逻辑输入
Operators:
= Logical Equivalence (≡ or ↔)
`->` or `<=` Logical Implication (→)
+ Disjunction (∨), AKA “or”
* Conjunction (∧), AKA “and”
`~` or `!` Negation (¬), AKA “not”
下面是输入和输出的一些例子:
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
好,我真的不知道哪里开始,但我不要求任何人为我写这个程序。我知道我需要使用Python字典来编写代码,它将键匹配到相应的命题。但是,我怎么知道哪些投入了钥匙,哪些投入了价值?此外,在的情况下:
`->` or `<=` Logical Implication (→)
和
`~` or `!` Negation (¬), AKA “not”
如何分配2个不同的输入能在Python字典中使用?我希望这不是太混乱,我在python非常noob,任何帮助表示赞赏。谢谢!
UPDATE 确定这里是我现在的代码:
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:
我相信我成功逆转字符串,并删除了所有的空格,但我还是有点困惑通过它迭代。
SECOND这里UPDATE是我的代码:
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))]
非常感谢! – Coder117
再次。我相信我已经正确建立了我的词典,现在我该如何阅读输入内容?我知道我需要使用堆栈。 – Coder117
@ T.Dog更新了帖子。应该让你开始。 –