基于python实现的关于命题的逻辑推理,主要是基于栈的操作和基于递归操作,来实现的。
turelist=[]
variabledict={}
def handleproblem(singlestr):
if singlestr in ["~","∪","∩","(","→"]:
turelist.append(singlestr)
elif turelist!=[]:
str1=turelist.pop()
if str1=="→":
str2=turelist.pop()
if singlestr=="1" and str2=="0":
handleproblem("0")
else:
handleproblem("1")
elif str1=="∪":
str2=turelist.pop()
if singlestr=="0" and str2=="0":
handleproblem("0")
else:
turelist.append("1")
elif str1=="∩":
str2=turelist.pop()
if singlestr=="1" and str2=="1":
handleproblem("1")
else:
handleproblem("0")
elif str1=="~":
if singlestr=="1":
handleproblem("0")
elif singlestr=="0":
turelist.pop()
handleproblem("1")
elif str1=="(":
turelist.append(singlestr)
elif singlestr==")":
turelist.pop()
handleproblem(str1)
else:
turelist.append(singlestr)
if __name__ == '__main__':
variablenum=int(input("请输入命题的个数"))
print("请输入命题的名称和真假\n")
for i in range(0,variablenum):
variable=input("第"+str(i+1)+"命题的名称:\n")
value=input("第"+str(i+1)+"命题的值:\n")
variabledict[variable]=value
production=input("请输入表达式:\n")
for i in range(0,len(production)):
flag=False
for key in variabledict.keys():
if production[i]==key:
handleproblem(variabledict[key])
flag=True
break
if flag==False:
handleproblem(production[i])
print("最后的结果为:",turelist[0])