Python入門(4) if文
プログラミングにおいて、特定の情況に応じた処理を行なう必要があり、これをif文という。
if文
キーワード if の後に2値 True(真) または False(偽)だけを取る論理式を評価して、True のときにだけ 文1,..,文n を実行するスクリプトをif文といい、Pythonでは次のように書く。
if 論理式 : 文1 .... 文n
2つの点に注意して欲しい。
- ifのある行はコロン(:)で改行する
- Trueの時に実行される 文1,...,文n はそれぞれ1行ずつ書いて、キーワード if に比べて字下げ(indent)して記述する(ブロック文)。
次のスクリプト if_example.py を見てみよう。
#!/usr/bin/env python # -*- coding: utf-8 -*- x = 100 y = 200 if x > y: print "x, y = ", x, y print x, " is bigger than ", y print y, " is bigger than ", x
スクリプト if_example.py では、6行目の倫理式の後にコロン(:) で改行、7行目と8行目が字下げされていることがポイントである。 字下げを軽く考えてしまって、考えて次のように書いてしまったとしよう。
#!/usr/bin/env python # -*- coding: utf-8 -*- x = 100 y = 200 if x > y: print "x, y = ", x, y print x, " is bigger than ", y print y, " is bigger than ", x
[重要] Pythoinの字下げ

Pythonでは、1行には1ステートメント(statement)しか書けない(他のプログラム言語では、コロン(;)で区切っていくらでも書くことができる場合が多い)。 Pythonにおける字下げは、可読性を高めるために利用される他のプログラム言語と異なり、ブロック文(block)を指定するための本質的に必要な書式である。
Pythonにおける字下げは行頭にある空白文字が重要で、同じ数の空白文字で字下げされたステートメント行がブロックとみなされる。 このためにPythonでは、タブ文字 "\t" をキー入力して見た目に字下げされているように見えても、字下げしたとは見なさない(IndentationError: unexpected indentのようなエラーが発生する)。 多くのテキストエディタでは、空白文字で字下げした行の次の行をタブ文字で埋め合わせることができるので注意が必要だ。
他の言語のブロック文の指定
Pythonでは、他のプログラム言とは違って単純化されていて、文(statement)の区切り文字はなく、1行に1つの文を書いて改行する。 ただし、複数の文を1つの塊であるブロック文に指定するには、上の例で見たように行頭を揃えて字下げする。 ブロック文の表し方はプログラム言語によって異なる。
C(C++)では、文はコロン(;)で区切り、ブロックは括弧 { と } で囲む(しかも変数は使う前に事前に宣言しなければならない)。 同じようしてブロックを { } で囲んで記述をする言語に、Javaなど多くの言語がある。
int x, y; x = 100; y = 200;if (x > y) { printf(x, " is bigger than ", y); printf(y, " is bigger than ", x); } printf(y, " is bigger than ", x);
Pascal(Delphi)では、次のようにブロックを begin とend で挟んで書く。
integer x, y; x = 100; y = 200; if (x > y) then begin writeln("x, y = ", x, y); write(print x, " is bigger than ", y); end; writeln(y, " is bigger than ", x);
if-else文
if文では論理式の値が True のときだけの処理を記述するが、False のときの処理も併せて記述したい場合が多い。 このときは次のように、if-else文を書く。
#!/usr/bin/env python # -*- coding: utf-8 -*- x = 100 y = 200 if x > y: print "x, y = ", x, y print x, " is bigger than ", y else: print y, " is bigger than ", x print x, " is less than ", y print "Do you understand if-else statement?"
次の2点に注意して欲しい。
- ifだけでなく、elseのある行はコロン(:)で改行する
- ifブロックだけでなく、elseブロックでもif や else に比べて字下げ(indent)して記述する。
if-elif-else文
if-else文のように2分岐でなく、途中にelifを複数回加えて、複数に処理を分岐させることができる。
#!/usr/bin/env python # -*- coding: utf-8 -*- x = 100 if x > 150: print x, " is big." elif x < 50: print x, " is small." else: print x, " is midium." print "Do you understand if-ilif-else statement?"
ここでも次の3点に注意して欲しい。
- elifは if と else の間に何行あっても構わない。
- if, else だけでなく、elifのある行はコロン(:)で改行する
- if, elseブロックだけでなく、elifブロックでもif, elifm, else に比べて字下げ(indent)して記述する。
値を比較する
2つの(変数の)値を比較演算子によって比較した評価結果は True または False を返す。
比較演算子 | 意味 |
---|---|
a < b | a は b より小さい |
a <= b | a は b 以下 |
a > b | a は bより大きいい |
a >= b | a は b 以上 |
a == b | a は b に等しい |
a != b | a は b に不一致 |
Python shellで実際に比較演算を確かめて見ることができる。
>>>100 > 200 False >>> 100 >= 200 False >>> 100 < 200 True >>> 100 <= 200 True >>> 100 == 200 False >>> 100 != 200 True
文字列同時でも比較できる。 同じ小文字または大文字同士では辞書式順序で比較されるが、大文字は小文字より小さいとなっているので注意しよう。
>>> "he" < "hellow" True >>> "he" < "happy" False >>> "H" < "h" True >>> "HI" < "Hi" True
一見、比較不可能であるような値同士でもエラーを返さずに比較してしまうことも知っておく必要がある。
>>> 'hello' < 3 False >>> True > False True >>> False == 0 True
Input an integer: 9 9 divided by 3: 3 9 is a multiple of 3 Input an integer: 7 7 divided by 3: 2 7 has a remainder 1 if divided by 3 Input an integer: -7 -7 divided by 3: -3 -7 has a remainder 2 if divided by 3
論理演算子
論理式を論理演算子 and , or, not を組み合わせて、複雑な命題を表す論理式を構成することができる。 四則演算と同様に、論理式を括弧 ( ) で囲むと評価が優先される。
論理演算子 | 意味 |
---|---|
P and Q | 論理式 P が True かつ(and) 論理式 Q が True であるときに限ってTrue |
P or Q | 論理式 P が True または(or)論理式 Q が True のどちらかであるときにTrue |
not P | 論理式 P が Flaseのときに True |
次のスクリプト logical_op.py は 変数 x の値が 80りよ大きく120未満であるかを判定する。
#!/usr/bin/env python # -*- coding: utf-8 -*- x = 100 if (80 < x) and (x < 120) : print x, " is greater than 80 and less than 120" elif x <= 80: print x, " is equal or less than 80" else: # 120 <= x print x, " is equal or greater than 120"
(ヒント);文字列の長さを返す関数 len を使う。
Input sting : a long long ago length: 15 is appropriate Input sting : apple length: 5 is too short Input sting : there were two brothers length: 23 is too long

Input an integer: 10 10 is a multiple of 5 but not of 3 or 4 Input an integer: 15 What is properties of the number 15 ? Input an integer: 20 What is properties of the number 20 ?