Sympy玩轉邏輯符號運算
讀《電腦科學精粹》一書的時候,發現很多時候需要用到符號運算,本來想自己寫一個的,後來發現sympy 把事情都做好了,而且sympy在 jupyter scipy-notebook 裡面就有,用起來實在是非常的方便。
下面就試做一下 第一章 1.2 邏輯中的題目,用以拋磚引玉
過熱的伺服器?如果伺服器過熱且空調關閉,會導致伺服器崩潰;如果伺服器過熱且機箱冷卻器失效,同樣會導致伺服器崩潰。那麼伺服器需要滿足哪些條件才能正常工作?
符號分配
'''
A: 伺服器過熱。
B: 空調關閉
C: 機箱冷卻器失效
D: 伺服器崩潰
'''
from sympy.logic import *
from sympy import symbols, Symbol
A = Symbol("伺服器過熱") # 宣告一個符號
B, C = symbols("空調關閉, 機箱冷卻器失效") # 宣告多個符號,用“逗號”或“空格” 分割
D = (A & B) | (A & C) # 即 ( A AND B ) OR ( A AND C ) , D 為伺服器崩潰
採用分配律對上式進行因式分解
from sympy.logic.boolalg import simplify_logic
D = simplify_logic(D)
D
當滿足條件!D伺服器可以正常工作。相應的換質位形式為
~D
採用德摩根定律去除括號
'''
~A: ~伺服器過熱 == 伺服器沒有過熱
~B: ~空調關閉 == 空調正常工作
~C: ~機箱冷卻器失效 == 機箱冷卻正常工作
~D: ~伺服器崩潰 == 伺服器正常工作
'''
from sympy.logic.boolalg import to_dnf
to_dnf(~D)
從上式可知,只要滿足條件 !A(伺服器沒有過熱)或 !B AND !C(空調和機箱冷卻器均正常工作),伺服器就能正常工作。
小結
sympy 幾乎涵蓋了各種各樣的數學符號運算,邏輯符號運算只是其中小小的一部分,其它強大的功能值得進一步發掘!
相關文章
- sympy —— Python 符號運算Python符號
- ruby邏輯判斷符號符號
- python函式符號sympy的用法Python函式符號
- 教你玩轉WPS的符號欄符號
- Linux中MAXIMA符號運算軟體的簡介(轉)Linux符號
- MongoDB之資料查詢(邏輯運算)MongoDB
- c#按位操作符&^|與邏輯條件操作符運算子&&_||_?:C#
- web前端學習教程,掌握核心邏輯運算Web前端
- 【Python爬蟲】邏輯運算練習題Python爬蟲
- mysql注入方法邏輯運算及常用函式MySql函式
- kingofark's Ineffective C/C++:自白2:有符號、無符號還有位運算,我的天! (轉)GoC++符號
- SCSS 邏輯運算子CSS
- javascript運算子——邏輯運算子JavaScript
- 好程式設計師web前端分享邏輯運算程式設計師Web前端
- 計算機最基礎的部分:運算邏輯電路(ALU)計算機
- JavaScript ! 邏輯非運算子JavaScript
- JavaScript || 邏輯或運算子JavaScript
- JavaScript && 邏輯與運算子JavaScript
- iOS Swift邏輯運算子iOSSwift
- javascript邏輯運算子“||”和“&&”JavaScript
- java程式碼執行字串中的邏輯運算方法Java字串
- 二、python的邏輯運算與資料型別Python資料型別
- C語言基礎-1、邏輯型別和運算C語言型別
- matlab符號運算結果的分數怎麼轉化為小數Matlab符號
- Linux Shell 邏輯運算子、邏輯表示式詳解Linux
- Shell 符號(轉)符號
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- JS 中的邏輯運算子JS
- Java基礎——邏輯運算子Java
- 符號(註釋符+轉義符+接續符)符號
- JavaScript >> 有符號右移運算子JavaScript符號
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- MySQL-WHERE子句 以及 邏輯操作符MySql
- 物聯網學習教程——邏輯運算子和邏輯表示式
- 【C】 15_邏輯運算子分析
- JS 邏輯運算子的特點JS
- 【C進階】15、邏輯運算子
- javascript基礎(邏輯運算子)(九)JavaScript