見出し画像

高校向けPython入門(11) Pythonにおける真理値

 前回,高校向けPython入門(10)実習課題例:論理回路 で,論理演算について考えた。
 AND 演算を,真理値の True/False と 1/0 の両方でやってみよう,という話だ。

初めに示したのは

# -- in1 と in2 の AND 演算をして out を決める方法を考える ---
in1 = 0
in2 = 1
if in1 == 1 and in2 == 1:
    out = 1
else:
    out = 0

これは,論理演算というより条件分岐だ。
次に示したのが,1 / 0 で「計算」する方法

out = in1 * in2

さらに,1 / 0 が入力された in1 と in2 を True/Flase に直して論理演算をする方法

t1 = (in1 == 1)
t2 = (in2 == 1)
if t1 and t2:
    out = 1
else:
    out = 0

最初のものと同じことをやっているが,t1 , t2 が True/False の値を取ることを意識しているというわけだ。

 高校の授業でやるとしたら,初めの if による分岐がいいだろう。掛け算でやるのはちょっとテクニカルかな。でも面白い。OR を計算でやれればもっとよいので,課題して出してもいいかもしれない。そうすれば,条件分岐を使わずに1行で書けるわけだ。

 ところで,調べたところ,Pythonでは AND の演算を 1 and 1 でできることがわかった。どういうことかというと,「True と 1 は違うけど同じ」なのだ。

 True と 1 は型が違う。True は 'bool' クラスで,1は整数だから違うのだ。

画像2

ところが,「値」は同じだ。
 なぜそんなことを考えたかというと,モンテカルロ法の話になる。

プログラミング:モンテカルロ法で遊んでみた で,scatter の色指定がTrue/Falseのブール値でできることを「さらに追記」に書いた。そのときは,「そんなことができるのか」と思ったが,「なぜだろう」と考えて,C言語では,True/False が,1/0 の値だったような(定かではない)ことを思い出した。もしそうなら,整数化する int 関数で値になるのではないだろうか。

画像1

なった。では,1 と 0 で論理演算ができるか。

画像3

できた。

念のため,Webで調べたら,次のページがあった。

それならば,半加算器の入力/出力のところで,入力値の 1/0 を使って,そのままやったらどうだろう・・・・・ とは思うが,高校の授業ではやらないほうがよさそうだ。

理由その1:あれこれやると生徒は混乱する
理由その2:「Pythonでは」なので,一般性があるとはいえない。Cindyscriptではエラーになる。

 ただ,教員がそういう知識を持っているのはよいことだろう。なんといっても「おもしろい」