global j
e = [[[[] for i in range(3)] for j in range(10)]for k in range(10)]
e[0][0][0]=input()
for j in range(1,10):
leng=th=0
for g in range(0,10):
jump=m=0
k=len(e[j-1][g][0])
if k==0 :
break
if k==1:
e[j][th][0]=e[j-1][g][0]
th+=1
continue
if e[j-1][g][0][0]=='(' and e[j-1][g][0][k-1]==')':
for i in range(1,k-1):
if e[j-1][g][0][i]=='(' or i==k-2 :
e[j-1][g][0]=e[j-1][g][0][1:k-1]
k-=2
break
if e[j-1][g][0][i]==')':
break
for i in range(k-1,-1,-1):
if e[j-1][g][0][i]==')' :
m+=1
continue
if e[j-1][g][0][i]=='(':
m-=1
continue
if m==0 :
if e[j-1][g][0][i]=='=' :
e[j][th][0]=e[j-1][g][0][0:i]
e[j][th+1][0]=e[j-1][g][0][i+1:k]
e[j-1][g][2]='='
th+=2
leng+=1
jump=1
break
if jump==1 :
continue
for i in range(k-1,-1,-1):
if e[j-1][g][0][i]==')' :
m+=1
continue
if e[j-1][g][0][i]=='(':
m-=1
continue
if m==0 :
if e[j-1][g][0][i]=='>' :
e[j][th][0]=e[j-1][g][0][0:i]
e[j][th+1][0]=e[j-1][g][0][i+1:k]
e[j-1][g][2]='>'
th+=2
leng+=1
jump=1
break
if jump==1:
continue
for i in range(k-1,-1,-1):
if e[j-1][g][0][i]==')' :
m+=1
continue
if e[j-1][g][0][i]=='(':
m-=1
continue
if m==0 :
if e[j-1][g][0][i]=='|' :
e[j][th][0]=e[j-1][g][0][0:i]
e[j][th+1][0]=e[j-1][g][0][i+1:k]
e[j-1][g][2]='|'
th+=2
leng+=1
jump=1
break
if jump==1 :
continue
for i in range(k-1,-1,-1):
if e[j-1][g][0][i]==')' :
m+=1
continue
if e[j-1][g][0][i]=='(':
m-=1
continue
if m==0 :
if e[j-1][g][0][i]=='&' :
e[j][th][0]=e[j-1][g][0][0:i]
e[j][th+1][0]=e[j-1][g][0][i+1:k]
e[j-1][g][2]='&'
th+=2
leng+=1
jump=1
break
if jump==1 :
continue
if k>1 :
e[j][th][0]=e[j-1][g][0][1:k]
e[j-1][g][2]='!'
th+=1
leng+=1
if leng==0 :
break
for i in range(0,j) :
print('第',i,'层',' ',end='')
for d in range(0,10):
if len(e[i][d][0])<1:
break
print(e[i][d][0],' ',end='')
print("\n")
g=w=1
a=[]
a.append(e[j-1][0][0])
for t in range(1,10):
if len(e[j-1][t][0])<1:
break
#如果树叶中命题变元与前面树叶的重复,则检索下一个树叶。
for k in range(0,t):
if e[j-1][t][0]==e[j-1][k][0] :
break
if k==t-1:
g+=1
#用g记录命题变元的个数。
a.append(e[j-1][t][0])
a.sort()
for letter in a:
print(letter,' ',end='')
print("真值\n")
# 为命题变元赋值并输出该赋值下的真值
b=[0]*g
for x in range(0,2**g) :
m=g-1
for i in range(0,g) :
b[i]=x&(2**m)
b[i]=b[i]>>m
m-=1
for letter in b :
print(letter,' ',end='')
for i in range(g) :
for y in range(g):
if e[j-1][i][0]==a[y]:
e[j-1][i][1]=b[y]
break
for m in range(j-2,-1,-1) :
i=0
for n in range(0,10):
if e[m][n][2]=='&':
e[m][n][1]=e[m+1][i][1] and e[m+1][i+1][1]
i+=2
elif e[m][n][2]=='|':
e[m][n][1] = e[m+1][i][1] or e[m+1][i+1][1]
i+=2
elif e[m][n][2]=='>' :
e[m][n][1]=int(not e[m+1][i][1] or e[m+1][i+1][1])
i+=2
elif e[m][n][2]=='=' :
e[m][n][1]=int(e[m+1][i][1]==e[m+1][i+1][1])
i+=2
elif e[m][n][2]=='!' :
e[m][n][1]=int(not (e[m+1][i][1]))
i+=1
elif len(e[m][n][0])>0 :
e[m][n][1] = e[m+1][i][1]
i+=1
print(e[0][0][1])
m=input()
python实现求真值表
最新推荐文章于 2024-04-21 10:02:34 发布