乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

プログラミング

                 18.論理演算子

「論理演算子」は

比較の結果同士を加算した結果を返します。

幾つかの条件を組み合わせる場合には必ず用いる方法です。

論理演算子 としては 3つしかありません。
and
or
not

and

and は条件と条件をつなげます。
日本語だと かつ という意味合い

条件A and 条件B

条件が双方が True の場合に True 
どちらか一方でもFalseなら結果がFalseになります。

and の左側と右側の両方の条件を満たしていないと
Trueにはなりません。

In [1]:
# 二つの条件がTrue
print(True and True)

# 片方の条件がFalse
print(True and False)
print(False and True)

# 両方の条件がFalse
print(False and False)
True
False
False
False
In [2]:
# 数値型での例
print(1==1 and 2==2)
print(1==1 and 2==1)
True
False

男性、20代の人のような複数の条件を満たす判定を
行いたいような時に使います。

In [3]:
a , b = 20 , '男性'
print(a==20 and b == '男性')
True

or

orの左側と右側、どちらかの条件がTrueであればTrueを返します。
日本語の意味だと もしくは という意味合いです。

条件A or 条件B

両方満たしていればTrue
どちらか一方でも合っていればTrueが返ってきます。
両方の条件を満たせない場合のみFalseが返ってきます。

In [4]:
# 二つの条件がTrue
print(True or True)

# 片方の条件がFalse
print(True or False)
print(False or True)

# 両方の条件がFalse
print(False or False)
True
True
True
False
In [5]:
# 両方の条件を満たす場合
a , b = 20 , '男性'
print(a==20 or b == '男性')

# どちらかの条件を満たす場合
a , b = 20 , '男性'
print(a==30 or b == '男性')

# 両方の条件を満たさない場合
a , b = 20 , '男性'
print(a==30 or b == '女性')
True
True
False

not

否定する意味合いになり、結果をひっくり返します。

True はFalseに 、 FalseはTrueにします。

In [6]:
# 含む場合
d = '男性'
print('男'  in d)
True
In [7]:
# 含まれないとしたい場合
d = '男性'
print('男'  not in d)
False

プログラムの中での制御は比較演算子と論理演算子を組み合わせて
どう処理を分岐させるか、続けさせるのかを組み上げていきますので
論理演算子の使い方も覚えておきましょう。

                 17.関係演算子

イコール一つの場合は代入で値を格納することになりました。

イコールを二つ用いると、今度は左側と右側を比較する動きになります。

比較のしかたが複数あり、演算子も複数存在します。
こういった比較をする演算子を、関係演算子や比較演算子と言っています。

数値の比較

まずは数値のデータを用意します。

変数 a と b を用意して

In [1]:
a , b = 2 , 3

演算子の左と右が等しいかどうかを判定する ==

等しい場合はTrue , 等しくない場合はFalseが返ってきます。

In [2]:
# a が b と等しいかどうかの判定
a == b
Out[2]:
False

演算子の左と右が等しくないかどうかを判定する !=

等しくない場合はTrue , 等しい場合はFalseが返ってきます。

In [3]:
# a が b と異なるかどうかの判定
a != b
Out[3]:
True

演算子の左と右の大小を比べる。

演算子の左側が右側よりも小さい(未満)であったらTrue
違えばFalseが返ってきます。

In [4]:
# a が b よりも小さい(未満) 小なり
a < b
Out[4]:
True

演算子の左側が右側よりも大きければTrue
違えばFalseが返ってきます。

In [5]:
# a が b よりも大きい 大なり
a > b
Out[5]:
False

大なり小なりにイコールをつけると、以上と以下という意味になります。

演算子の左側が右側以下であればTrue , 違えば False が返ってきます。

In [6]:
# a が b 以下である 小なりイコール
a <= b
Out[6]:
True

演算子の左側が右側以上であればTrue , 違えば False が返ってきます。

In [7]:
# a が b 以上である 大なりイコール
a >= b
Out[7]:
False

ここまでの演算子は数値の計算にしか用いることができませんので
変数に格納するデータの形には注意して下さい

文字列の比較

文字列の比較は
is
not
in
などを用いる。

判定が正しければ True , 正しくなければ False を返す。

In [8]:
a , b = 'a' , 'b'

# a が b と等しいかどうかの判定
print(a is b)           

# a が b と異なるかどうかの判定
print(a is not b)       

# a が b に含まれるかどうかの判定
print(a in b)   

# a が b に含まれないかどうかの判定
print(a not in b)
False
True
False
True

特に文字が含まれるかどうか、という判定はよく用いられます。

文字の検索結果を利用したプログラムの制御は頻繁に出てきますので
in 演算子 を使った比較の方法は押さえておきましょう。

このように文字や数値を比較すると
その結果は True or False の bool型で返ってきます。

比較した結果を用いてプログラムを制御する方法が
プログラムでは多用されるので書き方は覚えておきましょう。

                  16.代入演算子

プログラミングではデータを格納することを
「代入」といっています。

その代入の仕方に関わる演算子が「代入演算子」です。

代入は = イコール 記号となります。

文字を代入する場合は シングルクォートやダブルクォートで囲み
数値を代入する場合は そのまま数字を入力します。

In [1]:
# 変数a に数値 121を代入
a = 121

print(a)
121

「代入」はイコールの左側にある変数に
右側の計算結果を入れ込むような働きをします。

In [2]:
# 変数 a , b を用意
a , b = 2 , 3

print(a)

# a = a + b と同じ意味合い
a += b
print(a)
2
5

a に b を足した結果を 再度 aに代入する ということになります。
a = a + b と同じ意味合いになります。
結果は 最初に a に2 b に 3が入っているので 2 + 3 が
aの中に入ります。

この代入演算子を使った方法はプログラムでよく用いられます。
特に += 1 でその変数の値を1ずつ足していく方法は
かなりの頻度で用いられます。

その他の「代入演算子」について

In [3]:
a = b         # a に b を代入する
a += b        # a = a + b に同じ
a -= b        # a = a - b に同じ
a *= b        # a = a * b に同じ
a /= b        # a = a / b に同じ
a %= b        # a = a % b に同じ
a **= b       # a = a ** b に同じ
a //= b       # a = a // b に同じ

左側の変数に、右側の変数を足したり引いたりした
結果を代入するというようなことが行えます。

In [4]:
# 変数 a , b を用意
a , b = 2 , 3

print(a)

# 何度か足してみる
a += 2
a += 5
print(a)
2
9

代入するたびに変数の値は変化します。

この1行で変数の中身が大きく変化していきますので
どこでどう値を変更しているのかといったことが
すぐに把握できるように、演算子の使い方は
押さえておきましょう。

                 15.算術演算子

プログラミング言語の中では
各種の演算を表わす記号・シンボルが存在します。

それを「演算子」と言っています。

大きく四つに分けると

1.算術演算子(代数)

2.代入演算子

3.関係演算子(比較)

4.論理演算子

になります。
今回はその中で 「算術演算子」 についてとり扱っていきます。

算術演算子(または代数演算子)

算術演算子は四則計算をするのに使われる「演算子」です。

加算(足し算)) + 
減算(引き算) - 
乗算(掛け算) * 
除算(割り算) / 
剰余(余り) % 
べき乗 ** 

足すプラス と 引くマイナス は そのままですが
掛け算と割り算では使える記号が変わります。

掛け算は アスタリスク
割り算は スラッシュ
その他、珍しいものでは「剰余」があります。

In [1]:
# 足し算(加算)
1+2
Out[1]:
3
In [2]:
# 引き算(減算)
1-3
Out[2]:
-2
In [3]:
# かけ算(乗算)
2*3
Out[3]:
6
In [4]:
# 割り算(除算)
10/3
Out[4]:
3.3333333333333335

Python3ではスラッシュ1つの場合は結果は小数点まで出ます。

整数値だけにしたい場合はスラッシュを二つ重ねます。
これで切り捨て除算になります。

In [5]:
# 割り算(余りなし、切り捨て除算)
10//3
Out[5]:
3
In [6]:
# べき乗
2**3
Out[6]:
8

べき乗の記号を用いてルート計算もできます。

In [7]:
# ルート
print(2**0.5)
print(9**0.5)
1.4142135623730951
3.0

特殊な演算方法として
剰余といいますが 割った際の余りを求める方法です。
余りを求める際には % の記号を使います。

In [8]:
# 剰余(割った際の余り)
print(5%3)
print(5%2)
print(5%5)
2
1
0

この余りという計算は、プログラム内では様々な条件分岐や判定に応用できます。

In [9]:
# 掛け算や引き算の優先順位は算数と一緒
2 * 3 + 4
Out[9]:
10

足す、引くを優先したい場合は () カッコを用いる

In [10]:
a,b,c = 2,3,4
d = a * b + 4
e = a * (b + 4)

print(d)
print(e)
10
14

四則計算はプログラミングの基本になるので
しっかりと書き方を覚えてください。

                 14.文字列のフォーマット

前の講義では文字列の関数について取り扱いました。
その中でも文字列のフォーマットに関する部分は覚えることが多いので
詳しくやっていきたいと思います。

フォーマットとは文字列の出力を制御すること

文字列のフォーマットを行う方法としては3つ方法があります。

1つ目 文字列に特定のフォーマット文字をさしこんでフォーマットする。

2つ目 format関数を使う。

3つ目 文字列型のformat関数を使う。

2,3つ目はformat用の関数を使い、少しだけ書き方が違うだけでほぼほぼ一緒です。

format文字でフォーマットする方法

'文字列 %差し込みするデータがに対応する記号' % (変数)

%s : 文字列型

%d : 整数型

%f : 小数点型

%x : 16進法表記

%o : 8進法表記

%%%d : %を付けたい場合

In [1]:
errmsg = "Can't open file"
errcode = 19042
# 文字列に変数の結果を差し込む % s , %d
msg = "ERROR: %s (%d)" % (errmsg, errcode)
print(msg) 
ERROR: Can't open file (19042)

上記の例だと通常のprint関数では
文字列型のデータと数値のデータを一緒には取り扱えないが
フォーマット文字を使った差し込みであれば
%s の部分に文字列型
%dの部分に整数型のデータを差し込むことができる。

In [2]:
# 文字列型
print ("%s" % "ABC")
# 整数型
print ("%d" % 123)
# 小数点型
print ("%f" % 1.23)
# 16進法
print ("%x" % 255)
# 8進法
print ("%o" % 255)
# %を表示したい場合
print ("%%%d" % 80)
ABC
123
1.230000
ff
377
%80

フォーマットで便利な点としては、% に続く数値で
文字幅や桁数を指定することができる。

In [3]:
#=> |  ABC| : 右寄せ5文字分
print ("|%5s|"   % 'ABC')      

#=> |ABC  | : 左寄せ5文字分
print ("|%-5s|"  % 'ABC')      

#=> |  123| : 右寄せ5桁
print ("|%5d|"   % 123)     

#=> |123  | : 左寄せ5桁
print ("|%-5d|"  % 123)        

#=> | +123| : ±符号付き
print ("|%+5d|"  % 123)        

#=> | 1.23| : 全体桁数.少数点以下の桁数
print ("|%5.2f|" % 1.23)       

#=> |00123| : 0埋め
print ("|%05d|"  % 123) 
|  ABC|
|ABC  |
|  123|
|123  |
| +123|
| 1.23|
|00123|

format関数を使う方法

format(差し込むデータ , 差し込む先の文字列)

差し込む先の文字列.format(差し込むデータ)

※個人的には 文字列.format()の方が使いやすい

差し込む先の文字列には {} 波カッコ を付けて
その中に文字を差し込む。

In [4]:
aaa = 'このあとに文字を差し込む {}  差し込んだ'.format('さしこ')
print(aaa)
このあとに文字を差し込む さしこ  差し込んだ

複数個の文字の差し込みにも対応

{} 波カッコ内のインデックス番号が、format関数に入れる順番に対応する。

In [5]:
# 1番目は0、2番目は1に、3番目のデータが2のところに入る。
print('{0}-{1}-{2}'.format('100', '二百', 300))
100-二百-300

波カッコ内に任意の名前を指定し、キーワード引数として入力することも可能

In [6]:
# それぞれの名称に対応する文字が入る
print('{year}{month}{day}日'.format(year=2018, month=1, day=11))
2018年1月11日

左寄せ、中央寄せ、右寄せ

< ^ >で左寄せ、中央寄せ、右寄せができる。全体の文字数を数値で指定
埋める文字を指定することもできる。省略するとスペース。

一文字であれば全角でもOK。

{:寄せ記号 桁数}.format(数値など)

In [7]:
print('left  : {:<10}'.format(100))   # 左寄せ
print('center: {:^10}'.format(100))   # センター寄せ
print('right : {:>10}'.format(100))   # 右寄せ

print('left  : {:*<10}'.format(100))  # 左寄せ
print('center: {:a^10}'.format(100))  # センター寄せ
print('right : {:鬼>10}'.format(100)) # 右寄せ
left  : 100       
center:    100    
right :        100
left  : 100*******
center: aaa100aaaa
right : 鬼鬼鬼鬼鬼鬼鬼100

0埋め

ゼロ埋めして桁数を合わせたい場合は埋める文字を0に指定して右寄せする。

{:0桁数}.format(数値)

In [8]:
# 5けたで0埋め
print('zero padding: {:05}'.format(123))
zero padding: 00123

桁区切り(カンマ、アンダースコア)
3ケタ毎にカンマ,またはアンダースコアの区切りを入れる。

{:,}.format(数値)

なお、アンダースコアはPython3.6で追加されたオプションなので
バージョンが古い場合は使えません。

In [9]:
# カンマで3ケタ区切り
print('{:,}'.format(100000000))

# _ で3ケタ区切り
#print('{:_}'.format(100000000))
100,000,000

小数点以下の桁数指定

全体の桁数を指定するには . のあとに桁数を書く。
小数点以下の場合は固定小数点数を表す f を付ける

{:.桁数}.format(数値)
{:.桁数f}.format(数値)

In [10]:
#2桁分まで表示
print('{:.2}'.format(1.234321))

#5桁分まで表示
print('{:.5}'.format(21.23432))

# 小数点5桁分
print('{:.5f}'.format(221.234543))
1.2
21.234
221.23454

このページのトップヘ