用python编写一个函数f(s: str) -> str ,判断一个合式公式s是永真式、永假式还是可满足式。 (在s中,命题变元最多有p,q,r三个,仅包含与、或、非三种运算,用and, or, not来表示)函数要求:读入满足上述要求的代表s的非空字符串,如果是永真式则返回"永真式",如果不是永真式但是可满足式则返回“可满足式",如果是永假式返回“永假式”(不要返回引号)
时间: 2023-05-27 17:05:28 浏览: 181
我们可以使用真值表来判断一个公式的真假性质。因为命题变元只有p、q、r三个,所以一共有$2^3=8$种不同的赋值情况,我们可以枚举这些情况来计算公式的真值,如果这些情况下公式都为真,那么这个公式就是永真式;如果这些情况下公式都为假,那么这个公式就是永假式;否则,这个公式就是可满足式。
具体实现时,我们可以使用Python的eval函数来计算公式的真值。我们首先需要将字符串中的p、q、r替换成True和False,然后使用eval函数计算代表公式的字符串的真值。例如,如果公式为"(p and q) or not r",我们需要将它替换成"True and True or not False",然后使用eval函数计算这个字符串的值。最后,我们枚举所有可能的赋值情况,计算公式的真值,并判断公式的真假性质。
以下是完整代码:
def f(s: str) -> str:
variables = ['p', 'q', 'r']
values = [True, False]
# 替换变量为True和False
for v in variables:
s = s.replace(v, str(True))
s = s.replace('not True', str(False))
s = s.replace('not False', str(True))
# 判断公式真值
truth_values = []
for p in values:
for q in values:
for r in values:
truth_values.append(eval(s))
# 判断真假性质
if all(truth_values):
return "永真式"
elif not any(truth_values):
return "永假式"
else:
return "可满足式"
# 测试代码
print(f("(p and q) or not r")) # 可满足式
print(f("(p and q) or r")) # 永真式
print(f("(not p and not q) or (not p and q) or (p and not q)")) # 可满足式
print(f("p and not p")) # 永假式
阅读全文