真值表 逻辑表达式
创始人
2025-05-28 02:37:05
0

前言

遇到一个问题:想把真值表转换成逻辑表达式,真值表太长,不想手算,于是写了个脚本。但是为了检验结果的正确性,顺带写了个逻辑表达式转真值表的脚本。

一. 逻辑表达式转真值表

下面的例子是expression = abc+ (a非)b(c非),为了方便表示,用大写字母表示取非,小写字母表示原值,则expression = abc+AbC,在python代码中,该expression即被记为[(1,1,1),(0,1,0)],这里的(1,1,1)是按字母顺序的abc,这里的(0,1,0)是按字母顺序的AbC
此时已经可以表示了,但是如果还有字母d呢?即化简后d消失了,那么可以认为d是可有可无的x,为了统一处理,这里用数字2来表示x, 则此时expression=[(1,1,1,2),(0,1,0,2)] ,以此类推!


生成的真值表存储在test.csv文件中

import csvdef Write_csv(csv_file,data,encode='utf-8'):with open(csv_file, 'w', encoding=encode,newline='') as file_obj:writer = csv.writer(file_obj)for i in data:writer.writerow(i)def gen_data(exp,N):data_out = []for i in range(2**N):line = bin(i)line = str(line)line = line[2:]line = '0'*(N-len(line)) + linetmp_0 = 0for data_in in exp:tmp_1 = 1 for i in range(N):if( data_in[i] == 2 ):continueelif(data_in[i] == int(line[i])):continueelse:tmp_1 = 0breaktmp_0 = tmp_0 + tmp_1if(tmp_0 != 0):line = line + '1'else:line = line + '0'data_out.append(tuple(line))return data_outif __name__ == "__main__":#T = 1#F = 0#X = 2#大写字母代表取非#小写字母代表正常字母#expression = abc + AbC#exp = ['abc','AbC'] for N = 3#exp = ['abcX','AbCX'] for N=4(thus include D)#exp = [[1,2,1,2],[0,1,0,2]]exp = [[2,2,2,2],[1,2,1,0]]data = gen_data(exp,4)Write_csv('test.csv',data)

二. 真值表转逻辑表达式

这里输出的表达式的含义见上一小节。
需要注意的是两个极端例子:

  1. 如果真值表恒为1,则输出结果为[2,2,2,2](即真值表对应的输出结果永真时,其输入可为任意值)
  2. 如果真值表恒为0,则输出结果为[]
import csv#input:csv file
#out1:元素个数
#out2:把结果为1的值读进data
def Read_csv_True(csv_file,encode='utf-8'):data = []column = 0with open(csv_file, 'r', encoding=encode) as file_obj:reader = csv.reader(file_obj)for row in reader:element = row[-1]if(0 == int(element)):continuetmp = row[:-1]for i in range(len(tmp)):tmp[i] = int(tmp[i])data.append(tmp)column = len(row)-1return column,data
def get_Exp(data,N):if(len(data) == 0):return []for n in range(N):for i in range(len(data)-1):for j in range(i,len(data)):if (j == len(data)):#因为有del(data[j]),所以要判断溢出breaktmp = []cnt = 0for k in range(N):if(data[i][k] == data[j][k]):tmp.append(data[i][k])else:cnt += 1tmp.append(2)if(cnt == 1):data[i] = tmpdel(data[j])
if __name__ == "__main__":#N指字母个数N,data = Read_csv_True('test.csv','utf-8')print(N)get_Exp(data,N)print(data)

三.后记

本人试了几个结果,发现没有问题,如果有问题,可以@我。
另外,真值表转逻辑表达那个脚本本意就是想化简的,所以具有一定的化简功能,我感觉是化到最简了(尚未进行严格的数学证明!)。

相关内容

热门资讯

持续推进城市更新行动 中央这样... 转自:成都日报锦观持续推进城市更新行动 中央这样要求 中共中央办公厅、国务院办公厅近日印发《...
孟加拉国芒果 首次进入中国市场 转自:成都日报锦观孟加拉国芒果首次进入中国市场 28日晚,3吨产自孟加拉国的芒果搭载航班由达卡...
整治中小学利用教辅及校服谋利等... 转自:团结报  据新华社消息 记者5月27日从教育部获悉,近日,教育部办公厅印发《关于开展基础教育“...
以球为媒 促两岸交流“全垒打” 转自:团结报  □朱 莹 吴 敏  “二垒去补位”“举棒姿势做好再跑,脚抬起来冲”“很好,保持”……...
青羊区苏坡街道清波社区荣获全国... 转自:成都日报锦观青羊区苏坡街道清波社区荣获全国文明单位 本报讯 (成都日报锦观新闻记者 袁...
传承与创新皆缘起本心自律 转自:中华工商时报    “西湖如西子,浓淡总相宜。”在这美好的初夏时节,有机缘来到美丽的杭州,与全...
传承与创新:勇立潮头,决胜未来 转自:中华工商时报编者按:    以新提质,奋进未来。5月26日至28日,第七届全国青年企业家大会在...
英伟达2026财年Q1营收44... (转自:科创100ETF基金)  英伟达2026财年Q1营收441亿美元,去年同期260.44亿美元...
天问二号启程!哪些“上海智慧”... 转自:上观新闻5月29日凌晨,“天问二号”成功进入预定轨道,启程造访首站“2016 HO3”——这颗...
崇州国际竹藤文化周昨日开幕 转自:成都日报锦观崇州国际竹藤文化周昨日开幕 本报讯 (成都日报锦观新闻记者 粟新林) 5月...
三部门发文推动电子信息制造业数... 转自:成都日报锦观三部门发文推动电子信息制造业数字化转型 新华社北京5月28日电 (记者 周圆...
照镜子发现自己长的还行膨胀了怎... 照镜子发现自己长的还行膨胀了怎么办?那就继续膨胀下去,只要自己觉得没问题就行,只要自己觉得不尴尬,尴...
避暑山庄(下)——《游避暑山庄... 避暑山庄(下)——《游避暑山庄》围着湖水转了一大圈,终于返回避暑山庄正门。 避暑山庄的正...
我变成了行尸走肉,怎么办? 我变成了行尸走肉,怎么办?慢慢地从让你伤心的事情中走出来吧不知道你为什么会那么说了?是遭遇了什么很大...
galgame是什么? galgame是什么?美少女游戏。也叫恋爱养成游戏就是一个男主角与多个女主角间的故事,不同女主角都有...
歌曲天边。 歌曲天边。歌曲天边创作于什么年代... 歌曲天边创作于什么年代 展开 歌曲天边创作于什么年代?2...
文言文零基础如何自学? 文言文零基础如何自学?文言文零基础如何自学?本人读了十几年书但文言文和小学生没两样,现在发现了文言文...
看图写话求解 看图写话求解有个小男孩开心地跳着绳,突然发现一旁的小树苗断了。于是用手中的跳绳将小树苗断的地方绑好了...
【Java学习笔记】29.Ja... 前言 本章介绍Java的枚举和包。 Java 枚举(enum) Java 枚举是一个特殊的类...
怎样教3岁孩子学数学 怎样教3岁孩子学数学要想轻松开展幼儿数学教学,给孩子一个靠谱且有趣的学习方式很重要。1,用游戏来进行...