ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: 論理演算を求める関数

備忘録です。

論理演算、、読めば読むほど頭が混乱。。今回は論理演算を求める関数の備忘録です。

pythonで論理演算を求める関数

pythonでもbooleanでデータを表すときにTrueなら1、Falseなら0を使いますが、AかつBやAまたはBを求めるくらいならまだしもAかつBではないくらいからだんだん何を言っているのかわからなくなってきます。。やばい。

 

下記のサイトでは図で紹介されているのでなんとか頭を整理できました。

論理演算 - CyberLibrarian

 

自分なりにいろんな記事を引用して文章にまとめたのがこちら

 

論理積(conjunction)・・・AかつB(A∧B)

 ※入力値がすべて1の場合に1を出力し、それ以外の場合には0

論理和(disjunction)・・・AまたはB(A∨B)

 ※入力値のいずれかに1が入力された場合に1を出力し、それ以外の場合には0

否定(Negative)・・・・ではない(¬A)

 ※入力された値が1なら0に、0なら1に反転

否定論理積(Negative AND)・・AかつBではない(¬(A∧B))

 ※すべての入力値が1の場合に0を出力し、それ以外の場合には1

否定論理和(Negative OR)・・AまたはBではない(¬(A∨B))

 ※すべての入力値が0の場合に1を出力し、それ以外の場合には0

排他的論理和(exclusive)・・AまたはBかつAかつBではない((A∨B)∧¬(A∧B))

 ※入力値が異なる場合に1を出力し、それ以外の場合(入力値が同じとき)には0

含意(implication)・・・(A→B)

 ※Aが0である場合はBによらず1、Aが1でもBが1である場合は1

同等(equivalence)・・・(A↔︎B)

 ※A と B の値が一致する場合にのみ 1 

 

今回の命題としては上記の論理演算を関数で求めるというものです。operationに上記の演算の種類を入れて答えを返してくれます。関数内のif文はコメントを式に表したものになります。

 

def boolean_calc(x, y, operation):
    if operation == 'conjunction':
    # 入力値がすべて1の場合に1を出力し、それ以外の場合には0
        if x==1 and y==1:
            return 1
        else:
            return 0
    elif operation == 'disjunction':
    # 入力値のいずれかに1が入力された場合に1を出力し、それ以外の場合には0
        if x == 1 or y == 1:
            return 1
        else:
            return 0
    elif operation == 'implication':
    # Aが0である場合はBによらず1、AとBが1である場合は1
        if x == 0:
            return 1
        if x == 1 and y == 1:
            return 1
        else:
            return 0
    elif operation == 'exclusive':
    # 入力値が異なる場合に1を出力し、それ以外の場合(入力値が同じとき)には0
        if x != y:
            return 1
        else:
            return 0
    elif operation == 'equivalence':
    # A と B の値が一致する場合にのみ 1 
        if x == y:
            return 1
        else:
            return 0
    elif operation == 'negativeand':
    # すべての入力値が1の場合に0を出力し、それ以外の場合には1
        if x == 1 and y == 1:
            return 0
        else:
            return 1
    elif operation == 'negativeor':
    # すべての入力値が0の場合に1を出力し、それ以外の場合には0
        if x == 0 and y == 0:
            return 1
        else:
            return 0