Python_真值表求解器(逻辑表达式的求解)(eval实现求解)【2022-01-22】
Python_真值表求解器(邏輯表達(dá)式的求解)(eval實(shí)現(xiàn)求解)【2022-01-22】
- 1.TruthValueSolver.py
- 2.結(jié)果示例
- 2.1 含有非規(guī)定字符的輸入
- 2.2 &&、||不完整輸入
- 2.3 正確輸入與結(jié)果
【注】實(shí)現(xiàn)了一個(gè)輸入邏輯表達(dá)式,求解其真值表——真值表求解器。
實(shí)現(xiàn)思路:
1.輸入檢查。
2.提取表達(dá)式中的不同變量,放入lvar列表中。
3.按照lvar中變量的個(gè)數(shù),生成變量的真值組合,采用生成集合全部子集的手段實(shí)現(xiàn)。
4.將生成的真值組合每組替換相應(yīng)的變量,在將該字符串放入eval函數(shù)中即可得到該組合下的邏輯值,最后形成結(jié)果列表,輸出即可。
【1可輸入邏輯符號】&&、||、!
【2可輸入的邏輯變量】a–z(不能輸入a、n、d、n、o、t、r)只能英文小寫字符
【3可輸入的運(yùn)算優(yōu)先級括號】只能是()
【4其他可輸入字符】只有空格
除上述1234所指的字符,都是非法輸入,且邏輯符號是一對的但是只輸入了一個(gè)也視為錯(cuò)誤輸入!
【注】該功能之后會集成在MathToolsPaint中。
MathToolsPaint回顧:
Python_數(shù)學(xué)繪圖工具M(jìn)athToolsPaint[項(xiàng)目](動態(tài)組件與PaneWindow)(tkinter實(shí)現(xiàn))
1.TruthValueSolver.py
s = input("輸入一個(gè)邏輯表達(dá)式:") #print("s = ",s) ts = s#開始輸入檢查 no_yes = True i = 0varset = ['b','c','e','f','g','h','i','j','k','l','m','p','q','s','u','v','w','x','y','z']while i < len(s):if (s[i] not in varset) and s[i] not in ['(',')',' ']:if s[i] not in ['&','|','!']:print("邏輯表達(dá)式[非規(guī)定字符]輸入錯(cuò)誤![發(fā)生錯(cuò)誤位置]-->",i)no_yes = Falsebreakelse:if s[i+1] != s[i] and i + 1 < len(s) - 1 and s[i] != '!':print("邏輯表達(dá)式[運(yùn)算符]輸入錯(cuò)誤![發(fā)生錯(cuò)誤位置]-->",i)no_yesno_yes = Falsebreakelse:i = i + 2else:i = i + 1 print("檢查結(jié)果-->",no_yes) #完成輸入檢查if no_yes == True:#開始提取所有不同的變量符號,放入列表lvar中lvar = []for i in list(s):if (i >= 'a' and i <= 'z') and (i not in lvar):lvar.append(i)lvar_len = len(lvar)print("\n提取的變量lvar-->",lvar)#提取所有不同的變量符號完成#開始生成變量符號的真值組合,即生成含有l(wèi)var_len個(gè)元素集合的全部子集print("\n輸出變量真值組合:")lt = []max = 2**lvar_lenfor i in range(0,max):tlt = list(bin(i))tlt.pop(0)tlt.pop(0)tlt_len = len(tlt)for j in range(0,lvar_len - tlt_len):tlt.insert(0,'0')print(tlt)lt.append(tlt)#print("lt = ",lt)#生成變量符號的真值組合完成#開始將生成的真值組合中的每一組,帶入到相應(yīng)的變量值,調(diào)用eval函數(shù)得到表達(dá)式真值#并添加到結(jié)果列表s_result,同時(shí)輸出該表達(dá)式及其值print("\n輸出變量真值組合的值:")s_result = []for i in lt:ts = sts = ts.replace('&&',' and ') #將&&、||、!替換成python的邏輯運(yùn)算符ts = ts.replace('||',' or ')ts = ts.replace('!',' not ')for j in range(0,lvar_len):#print(ts,lvar[j],i[j])ts = ts.replace(lvar[j],i[j]) #將每個(gè)變量的位置用對應(yīng)的真值組合中的0或1代替s_result.append(int(eval(ts))) #使用eval函數(shù)計(jì)算print(ts,":-->",int(eval(ts)))#生成該邏輯表達(dá)式真值表完成#開始輸出真值表k = 0print("\n\t\t<<<真值表>>>")for i in lvar:print(i,"\t",end='')print(s,"")for i in lt:for j in range(0,lvar_len):print(i[j],"\t",end='')print(s_result[k])k = k + 1#輸出真值表完成2.結(jié)果示例
2.1 含有非規(guī)定字符的輸入
2.2 &&、||不完整輸入
2.3 正確輸入與結(jié)果
(q && p || q) && !w
m || (q && p || q) && !w
總結(jié)
以上是生活随笔為你收集整理的Python_真值表求解器(逻辑表达式的求解)(eval实现求解)【2022-01-22】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VisualSVN Server是什么
- 下一篇: 大象DAX Elephant未来应用价值