卡诺图在程序中的应用
目录
二灯游戏
三灯游戏
卡诺图的相关知识可以参考此处:https://blog.csdn.net/hahasusu/article/details/88244155
二灯游戏
一个游戏机有两个灯,一黄一绿,它们忽闪忽灭,你必须在出现以下情况的时候迅速按下游戏机:
- 绿灯灭,黄灯亮
- 绿灯、黄灯都灭
- 绿灯、黄灯都亮
解题思路:
1、首先定义两个基本的命题
- 命题A:绿灯亮
- 命题B:黄灯亮
2、画出卡诺图
A为绿灯,0和1分别表示该灯的状态;
B为黄灯,同理。
根据游戏规则的3种情况,分别对应卡诺图种的:00、01、11
根据卡诺图每格具备相邻性的特点,使用1*1、1*2、2*2、4*4的网格圈出(仅能使用2^n个格子去圈)
3、卡诺图化简
根据上图得出式子:(A`B` + A`B) + (A`B+AB)= A` + B (A`表示A反)
由此得出只要满足 A` V(V表示或) B ,即绿灯灭 或者 黄灯亮即可按下按钮
4、验证
我们先不用卡诺图化简法来解决上述问题,以下是python代码:
'''
二灯游戏:
1、绿灯灭,黄灯亮
2、绿灯、黄灯都灭
3、绿灯、黄灯都亮
'''
def isPress(green, yellow):if green == False and yellow == True:return Trueelif green == False and yellow == False:return Trueelif green == True and yellow == True:return Truereturn False#绿灯灭,黄灯亮
status = isPress(green=False, yellow=True)
print(status)
#绿灯、黄灯都灭
status = isPress(green=False, yellow=False)
print(status)
#绿灯、黄灯都亮
status = isPress(green=True, yellow=True)
print(status)
#绿灯亮,黄灯灭
status = isPress(green=True, yellow=False)
print(status)
输出结果:
卡诺图化简后的式子A` V B,代码:
def isPress2(green, yellow):if (not green) or yellow :return Truereturn Falsestatus = isPress2(green=False, yellow=True)
print(status)
status = isPress2(green=False, yellow=False)
print(status)
status = isPress2(green=True, yellow=True)
print(status)
status = isPress2(green=True, yellow=False)
print(status)
输出结果:
由此可见使用卡诺图即可把复杂的句子简化成两行。
三灯游戏
将上述游戏进行升级,存在3种灯(绿灯、黄灯、红灯)的情况下,符合如下规则即可按下按钮:
- 3灯都灭
- 黄灯灭、红灯亮
- 绿灯灭、黄灯亮
- 3灯都亮
解题思路:
1、定义命题
- 命题A:绿灯亮
- 命题B:黄灯亮
- 命题C:红灯亮
2、画出卡诺图,并将上述情况在卡诺图中用1来代替原先的二进制
上图将4个规则在卡诺图中对应出来。
3、卡诺图化简
根据卡诺图每格具备相邻性的特点,进行如下的画圈:
因此可得式子:(A`B`C`+A`B`C+A`BC+A`BC`) + (A`B`C+A`BC+AB`C+ABC)
= (A`B` + A`B) + (A`C +AC)
= A` + C
化简后获得 A` + C
4、验证
正常解法:
def isThreeLightPress(green, yellow, red):if green == False and yellow == False and red == False:return Trueelif yellow == False and red:return Trueelif green == False and yellow:return Trueelif green and yellow and red:return Truereturn False
# 全灯灭
status = isThreeLightPress(green=False, yellow=False, red=False)
print(status)
# 黄灯灭、红灯亮(不在乎绿灯的状态,因此都加上)
status = isThreeLightPress(green=False, yellow=False, red=True)
print(status)
status = isThreeLightPress(green=True, yellow=False, red=True)
print(status)
# 绿灯灭、黄灯亮(不在乎红灯的状态,因此都加上)
status = isThreeLightPress(green=False, yellow=True, red=False)
print(status)
status = isThreeLightPress(green=False, yellow=True, red=True)
print(status)
# 全灯亮
status = isThreeLightPress(green=True, yellow=True, red=True)
print(status)
输出结果:
使用卡诺图化简法:
#卡诺图改造为not green or red
def isThreeLightPress2(green, yellow, red):if not green or red:return Truereturn False
print('---------this is a split----------')
# 全灯灭
status = isThreeLightPress2(green=False, yellow=False, red=False)
print(status)
# 不在乎绿灯的状态,因此都加上
status = isThreeLightPress2(green=False, yellow=False, red=True)
print(status)
status = isThreeLightPress2(green=True, yellow=False, red=True)
print(status)
# 不在乎红灯的状态,因此都加上
status = isThreeLightPress2(green=False, yellow=True, red=False)
print(status)
status = isThreeLightPress2(green=False, yellow=True, red=True)
print(status)
# 全灯亮
status = isThreeLightPress2(green=True, yellow=True, red=True)
print(status)
输出结果:
卡诺图在程序中的应用相关推荐
- 微信小程序中的tabBar设置
我们先来看一份图,这个设置在官方文档中已经写得很清楚了,我只是做一个总结 注:我写注释是为了方便说明,在小程序中的json文件中是不能用注释的 这个tabBar属于全局属性,因此就在全局配置文件app ...
- C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...
- 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库
在<在windows程序中嵌入Lua脚本引擎--建立一个简易的"云命令"执行的系统>一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序.这是个非 ...
- 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
在<在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎>开始处,我提到某公司被指责使用"云命令"暗杀一些软件.本文将讲述如何去模拟一个 ...
- 在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎
前些天听到一个需求:某业务方需要我们帮忙清理用户电脑上的一些废弃文件.同事完成这个逻辑的方案便是在我们程序中加入了一个很"独立"的业务逻辑:检索和删除某个程序产生的废弃文件.试想, ...
- 在vc6控制台程序中如何调用运行ImageMagick命令行工具
在http://www.imagemagick.org/script/index.php网站下载相应的执行文件,这里以下载ImageMagick-6.6.5-10-Q16-windows-static ...
- spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式
Spark中广播变量详解以及如何动态更新广播变量mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...
- 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...
关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...
- python缩进在程序中长度统一且强制使用_Python习题纠错1
February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...
最新文章
- 苹果无线耳机使用方法_安卓党可以使用 AirPods 吗?实测结果.....
- button 元素的css3旋转动画
- OpenGL HDR色调映射的实例
- CodeForces - 1405E Fixed Point Removal(线段树+思维)
- hdu1068 Girls and Boys --- 最大独立集
- 如何避免成为新技术背后的“奶嘴一族”
- netlink的博客
- 【转】世界顶级人工智能会议的总结
- FLUKE754连接电脑hart协议操作指南
- jQuery实现的添加到产品对比
- Ambari安装和汉化(转)
- 计算机课评课意见,信息技术应用 用计算机画函数图象第一课时评课稿
- Android 应用资源(一)
- 第十章 项目沟通管理和干系人管理
- jeecms9自定义标签以及使用新创建的数据库表
- 面试被HR问:你有什么优缺点,该如何作答
- php引用传递_php的按值传递与引用传递 - 小俊学习网
- AI时代已经起航,一些问题仍待解决
- 不支持多拨的无线路由 一号多拨+无线
- selenium.common.exceptions.SessionNotCreatedException浏览器版本不匹配报错