Python ブール型以外でTrueやFalseと判定される値
はじめに
Pythonでは、ブール型以外にもTrueやFalseと判定される値があります。ここではそれらの値と判定値を整理します。
TrueやFalseと判定される値
ブール型以外でTrueやFalseと判定される値は以下の通りです。
値 | 判定値 |
---|---|
0 | False |
0.0 | False |
''(空文字列) | False |
上記以外 | True |
実行例
Falseとなる例
以下はFalseとなる例です。if文の評価結果がFalseとなっていることがわかると思います。
- 例1
if 0: print('True') else: print('False')
False
- 例2
if 0.0: print('True') else: print('False')
False
- 例3
if '': print('True') else: print('False')
False
Trueとなる例
以下はTrueとなる例です。ここでは1例のみ紹介しますが、Falseとなる例で説明した内容以外であれば、すべてTrueとなります。
- 例
if 1: print('True') else: print('False')
True
TrueやFalse判定を利用したコードの簡易化
TrueやFalseと判定される値を利用するとコードを簡易化できます。
例えば、空文字が入力されている間whileループを繰り返す処理を考えます。
input()
で入力した文字が空文字かどうか判定する場合、TrueやFalse判定を利用するとコードを簡易化できます。
- TrueやFalse判定を利用しない場合の例
name = '' while name == '': # not name != ''でも同様 print('名前を入力してください') name = input() print('こんにちは' + name + 'さん')
- TrueやFalse判定を利用した場合の例
name = '' while not name: # 空文字が入力された場合にFalse判定されることを利用して簡易化 print('名前を入力してください') name = input() print('こんにちは' + name + 'さん')
TrueやFalse判定で不具合を生まないために
間違えやすいのがマイナスの値です。0や0.0はFalseと判定されますが、マイナスの値はTrueと判定されます。
例えば年齢を入力してもらう処理を考えます。ここでTrue、False判定を誤解していると、不具合を埋め込んでしまう可能性があります。
年齢は0以上の値なので、条件式は age >= 0
となります。しかし以下のTrue、False判定を誤解した間違った例ではage != 0
という条件式になっています。
- 間違った例
print('年齢を入力してください') age = int(input()) if age: # この条件式は age != 0と同等 print(str(age) + '歳ですね') else: print('0以上の値を入力してください')
- 正しい例
print('年齢を入力してください') age = int(input()) if age >= 0: print(str(age) + '歳ですね') else: print('0以上の値を入力してください')
Python 制御文の記述方法
はじめに
ここでは、条件文やループ文などのPythonの制御文を整理します。
基本的な記述方法
基本的な記述方法は以下の通りです。
- キーワード + 条件式 + コロン(:)という構成の行で始まる
- 必要に応じて次の行に「節」と呼ばれるコードのブロックが続く
- コードのブロックは、コードの字下げ*1で指定する
- コードのブロックの中にはほかのブロックを含めることができる
- 字下げがなくなるか、上位ブロックの字下げに戻るとブロックは終了する
条件文
if文
if文の節は条件式がTrueの場合に実行されます。
if 条件式: 処理 # 条件式がTrueの場合に実行
elif文
if文やelif文に続けて記述します。
「else if」を意味し、それ以前の条件式がFalseだった場合に限り条件式を判定します。
if 条件式: 処理 # 条件式がTrueの場合に実行 elif 条件式: 処理 # 前の条件式がFalseかつ条件式がTrueの場合に実行
else文
if文やelif文に続けて記述します。
if文またはelif文の条件がFalseの場合にelse節が実行されます。
if 条件式: 処理 # 条件式がTrueの場合に実行 else: 処理 # 条件式がFalseの場合に実行
使用例
if文、else文、elif文の使用例は以下の通りです。
print('名前を入力してください') name = input() if name == 'taro': print('こんにちはtaroさん') elif name == 'hanako': print('こんにちはhanakoさん') else: print('名前が間違っています')
ループ文
while文
条件式がTrueの間、While節が繰り返し実行されます。
while 条件式: 処理 # 条件式がTrueの間繰り返し実行
forループ文
一定の回数だけコードのブロックを繰り返し実行します。
forループではrange()関数を用いることで、連続した値をループごとに取得します。現在の値は変数に格納されます。
for 変数名 in 引数を指定してrange()を呼び出し: 処理 # 一定回数繰り返し実行
range()関数の指定方法
range()関数に渡す引数の数に応じて、開始、終了、ステップ数が異なります。
引数を1つ指定した場合
内容 | 値 |
---|---|
開始 | 0 |
終了 | 第1引数の値-1 |
ステップ数 | 1 |
for i in range(5): print(str(i))
0 1 2 3 4
引数を2つ指定した場合
内容 | 値 |
---|---|
開始 | 第1引数 |
終了 | 第2引数の値-1 |
ステップ数 | 1 |
for i in range(12, 16): print(str(i))
12 13 14 15
引数を3つ指定した場合
内容 | 値 |
---|---|
開始 | 第1引数 |
終了 | 第2引数の値-1 |
ステップ数 | 第3引数 |
for i in range(1, 7, 2): print(str(i))
1 3 5 7
break文
プログラム実行がbreak文に到達すると、即座にwhileループ節またはforループ節を抜け出します。
while 条件式: if 条件式: break:
continue文
プログラム実行がcontinue文に到達すると、即座にwhileループ節またはforループ節の先頭に戻ります。
while 条件式: if 条件式: continue:
使用例
while文、break文、continue文の使用例は以下の通りです。
while True: print('名前を入力してください') name = input() if name != 'taro': continue: print('こんにちはtaroさん、パスワードを入力してください') password = input() if password == "password": break: print('認証しました')
Python 演算子の種類と評価順序
数学演算子
演算子一覧
優先順位 | 演算子 | 説明 | 例 | 評価結果 |
---|---|---|---|---|
1. | ** | 累乗 | 2 ** 4 | 16 |
2. | * | 掛け算 | 2 * 4 | 8 |
2. | / | 割り算 | 23 / 8 | 2.875 |
2. | // | 整数の割り算。小数点以下切り捨て | 23 // 8 | 2 |
2. | % | 余剰(割り算の余り) | 23 % 8 | 7 |
6. | + | 足し算 | 2 + 4 | 6 |
6. | - | 引き算 | 4 - 2 | 2 |
評価順序
式は通常の数学と同じ順序で評価されます。
- 優先順位に従い、累乗演算子(**)が評価されます。
- 掛け算演算子(*)、割り算演算子(/)、整数の割り算演算子(//)、余剰演算子(%)が、左から右に評価されます。
- 足し算(+)、引き算(-)演算子が左から右に評価されます。
丸カッコ()を使って順序を変えることもできます。
実行例
実行例は以下の通りです。優先順位通りに評価されていることがわかると思います。
- 例1
2 + 3 * 6
20
- 例2
(2 + 3) * 6
30
- 例3
(5-1) * ((7 + 1) / (3 -1))
16.0
比較演算子
実行例
実行例は以下の通りです。
- 例1
42 == 42
True
- 例2
2 != 3
True
- 例3
'hello' == 'Hello'
False
Python 先頭行のシバン行(#!)とは
シバン行とは
シバン(shebang)行とはPythonスクリプトの先頭行のことで、このスクリプトを実行するのがPythonであることをコンピュータに伝える働きをします。
シバン行は#!から始まります。
- シバン行の例
#! python3 print( 'Hello world' )
書き方
用途
MacやLinuxでの用途
Windowsでの用途
シバン行を利用する目的
Windowsでシバン行を利用する目的は以下の通りです。
- 実行するPythonのバージョンをスクリプトから指定したい
複数バージョンのPythonがインストールされている環境では、py.exe*1を利用することでスクリプトを適切なバージョンのインタプリタ(python.exe)で実行できます。
py.exeはシバン行の読み込みに対応しており、シバン行をもとに実行するインタプリタを選択します。
- py.exeでのスクリプト実行
py pythonScript.py
なお、py.exeではシバン行がない場合はインストールされている最新のインタプリタが選択されますので、シバン行を記述しなくても問題ありません。
また、コマンドラインからバージョンを指定することもできます。コマンドラインとシバン行をどちらも記述した場合は、コマンドラインが優先されます。
- インストール済のPython3の中で最新のバージョンを指定
py -3 pythonScript.py
- バージョン3.6を指定
py -3.6 pythonScript.py
少し試すレベルであればコマンドライン指定で問題ないかと思いますが、バージョンが明確に決まっている場合はスクリプト上に記述したほうが分かりやすいですし、実行時の手間も減ると思います。
- 開発時のPythonのバージョン情報を残しておきたい
Windowsユーザで1つのバージョンのPythonしかインストールしていない場合など、シバン行が直接必要ない場合もあるかもしれません。
一方で、情報共有という観点では、シバン行は有益な情報源となります。スクリプトを再利用したり第三者に配布する可能性がある場合、シバン行を記述しておくと後々役に立つかもしれません。
Pythonはバージョンによって動作が異なる場合がありますので、スクリプト上から開発時のバージョンがわかればデバッグ時に参考になります。
最低限、Python2かPython3かどうかは分かるようにしておくと良いと思います。
*1:Pythonの実行ランチャ。Python3.3以降のバージョンでインストールされる。Anacondaなどのディストリビューションでには含まれない