第79回【Python】NAND 演算の基本、NOR 演算の基本、XNOR 演算の基本

Pythonby LeoSaki

現在取り組んでいるのは、paiza ラーニング問題集「論理演算メニュー」になります。

学習サービストッププログラミング学習サイト【paizaラーニング】のメインページ。paiza独自のシステムにより、面倒な環境構築が不要、Webブラウザがあれば5秒で学習が開始できます。わかりやすい1本3分の動画と豊富な演習問題で初心者〜中級者のプログラミング学習を支援します。paiza.jp

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 79 回目です。

キャンプ場でも、勉強しています。LeoLuna(夫婦)の場合、キャンプの主目的が焚火で普段作らないものに挑戦しよう(夕食)なので、それ以外の時間は読書をしたり勉強をしたり、たまには昼寝をしたり、まったり過ごします。

それでは、今日も頑張ってみようと思います。

NAND 演算の基本

プログラミング練習問題「NAND 演算の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A NAND B の結果を出力してください。
ここで、 NAND 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
001
011
101
110

すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


0 0

NAND は、Not And の略なので、論理積の否定を書いてあげれば OK !

Python
A,B = map(int,input().split())
print(int(not(A and B)))

Python の not は、bool 型になってしまうことに注意。

VBA
AB = Split(Cells(1, 1), " ")
A = CBool(AB(0))
B = CBool(AB(1))
Debug.Print CInt(Not (A And B)) * -1

NOR 演算の基本

プログラミング練習問題「NOR 演算の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A NOR B の結果を出力してください。
ここで、 NOR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
001
010
100
110

すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


0 0

NOR は、Not Or の略なので、論理和の否定を書いてあげれば OK !

Python
A,B = map(int,input().split())
print(int(not(A or B)))

こちらも、Python の not は、bool 型になってしまうことに注意。

VBA
AB = Split(Cells(1, 1), " ")
A = CBool(AB(0))
B = CBool(AB(1))
Debug.Print CInt(Not (A Or B)) * -1

XNOR 演算の基本

プログラミング練習問題「XNOR 演算の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A XNOR B の結果を出力してください。 ここで、 XNOR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
001
010
100
111

すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


0 0

XNOR は、Not Xor の略なので、排他的論理和の否定を書いてあげれば OK !

Python
A,B = map(int,input().split())
print(int(not(A ^ B)))

こちらも、Python の not は、bool 型になってしまうことに注意。

VBA
AB = Split(Cells(1, 1), " ")
A = CBool(AB(0))
B = CBool(AB(1))
Debug.Print CInt(Not (A Xor B)) * -1

最後に

Python の場合、not は bool 型であることを頭に入れておこう。多くの場合は、True or False が分かればいいのだけれど、結果を掛け算して False の場合は 0 という値を返す、みたいなことをするときには注意が必要かもしれない。

not(A and B) * 100 の結果は、True か False しか出力されない。

int(not(A and B) * 100) の結果は、1 か 0 しか出力されない。

int(not(A and B)) * 100 の結果は、100 か 0 が出力される。

よく考えると当然のことだけれど、他の言語の癖でさらりと書いてしまうと、罠になる可能性がある。

引き続き、よろしくお願いいたします!

LeoSaki

旦那の方。 猫と嫁とのキャンプをこよなく愛する。 AWS 6 冠達成者。AWS 好き。 ITパスポート、基本情報技術者、応用情報技術者も取得しています。