好了,孩子们,我们开始吧。首先,我有几个问题。由于我的项目很大,我将简单地分阶段提问,这个问题是第一个问题。我正在创建一个为后缀逻辑表达式生成真值表的程序。以下是允许的运算符及其逻辑等价物:
Operators:
= Logical Equivalence (≡ or ↔)
`->` or `<=` Logical Implication (→)
+ Disjunction (∨), AKA “or”
* Conjunction (∧), AKA “and”
`~` or `!` Negation (¬), AKA “not”
以下是输入和输出的一些示例:
^{pr2}$好吧,我真的不知道从哪里开始,但我不是要任何人为我写这个程序。我知道我需要使用Python dict编写代码,它与对应命题的键相匹配。但是,我怎么知道把哪一个放在键上,哪一个放在值上呢?此外,在以下情况下:
`->` or `<=` Logical Implication (→)
以及
`~` or `!` Negation (¬), AKA “not”
如何分配两个不同的输入,以便在python dict中使用?我希望这不会太混乱,我对python不在行,任何帮助都将不胜感激。谢谢您!在
更新 好的,这是我现在的代码:
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:
我相信我成功地反转了字符串并删除了所有的空白,但我仍然有点困惑地遍历它。在
第二次更新是我的代码:
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))]
你必须按照从外到内的顺序来构建你的口述:
数字表示运算符需要多少操作数。在
要解析输入,请从右向左读取。在
使用递归函数,该函数从右侧使用一个令牌。在
(1)如果令牌是运算符(即字典中的键),则从主字典中检索相应的值
首先存储的数字是运算符接受的参数数。所以你的函数现在必须在有参数的时候调用它自己。一定要跟踪哪些令牌已经被读取。一种很好的方法是使用列表迭代器,它将精确地输出每个元素一次,这样就不会出现索引错误。一旦你有了所有的参数,你就应用你刚刚检索到的真值表,读出结果并返回它。在
(2)如果令牌不是操作器,则函数必须返回它。在
^{pr2}$相关问题 更多 >
编程相关推荐