pythonのif文についてまとめています。
pythonのifの構文
#!/usr/bin/python3 a=10 b=20 if( a == 10 ): # a = 10 のときの表示 print( "a = ten" ) elif( b == 20 ): # b = 20 のときの表示 print( "b = twenty" ) else: # それ以外の場合の表示 print( "a=%d" % a ) print( "b=%d" % b )
実行するとこうなります。
※print文で%を使う記述は、フォーマット文字列に当てはめた文字列を出力します。
関連 pythonのprintで出力する文字列、数値、変数の例
Pythonのif elseの構文
a = ten
構文としてはこんな感じ。
if( 条件文 ): 実行文 elif( 条件文 ): 実行文 elif( 条件文 ): 実行文 : : else: 実行文
条件分岐がある場合はelif(else ifの意味)で別の条件を記述します。どのif、elifの条件にも当てはまらない場合はelseが実行されます。
また、pythonの基本でもあるのですが、ifやelif、elseの行と実行分の行はインデント(字下げ)が必要。タブでもスペースでも良いのですが、どちらかに統一しましょう。過去のバージョンでは、タブとスペースが混在しているとエラーになるケースがあります。
pythonのifのサンプルコード
複数の条件のifサンプル
#!/usr/bin/python3 a = 10 b = 20 # and で条件分を記述 if( a == 10 and b == 20 ): print ("a = 10 and b = 20" ) # or で条件分を記述 if( a == 10 or b == 10 ): print ("a = 10 or b = 10" ) # andとor で条件分を記述 if( (a == 10 or b == 10) and (a == 20 or b == 20) ): print ("(a = 10 or b =10) and (a = 20 or b =20)")
複数の条件を判定するには、条件分をandやorで接続します。
実行するとこうなります。
a = 10 and b = 20 a = 10 or b = 10 (a = 10 or b =10) and (a = 20 or b =20)
リストや配列の中に指定した値の存在チェック ifサンプル
#!/usr/bin/python3 mylist=['a','b','c','d','e'] if( 'a' in mylist ): print( "found [a]" ) if( not 'x' in mylist ): print( "not found [x]" )
実行結果はこうなります。
found [a] not found [x]
値 in リスト型 と指定することで、指定したリスト型の値の中に存在するかどうかを判定できるんですね。notをつけると、リストの中に存在しないという判定になります。
関連 Pythonのlist 入門 追加、修正、削除、範囲指定、リストコピーのサンプルコード
タプル内にリストの入れ子があるとargument of typeエラー
#!/usr/bin/python3 # タプル mytuple=('a','b',['c','x'],'d','e') # 問題のデータ出現前なのでエラーが出ない if( 'a' in mytuple ): print( "found [a]" ) # タプル内に入れ子でリストが入っているとエラー if( 'x' in tuple ): print( "found [x]" )
実行するとこうなります。
File "./sample_if_tuple.py", line 11, in <module> if( 'x' in tuple ): TypeError: argument of type 'type' is not iterable
単純なタプルならinで判定できますが、リスト型が入れ子になっているようなタプルでは、argument of typeエラーになります。
辞書型にキーや値、キーと値の組み合わせが存在チェック ifサンプル
#!/usr/bin/python3 # 辞書型:キーと値の組み合わせ配列 mydict={'a':'apple', 'b':'book', 'c':'cat' } # キー内に存在するかどうか if( 'a' in mydict ): print( "found [a]" ) # 値内に存在するかどうか if( 'cat' in mydict.values() ): print( "found [cat]" ) # キーと値の組み合わせが存在するかどうか if( ('b','book') in mydict.items() ): print( "found [b , book]" )
実行するとこうなります。
found [a] found [cat] found [b , book]
辞書型は、辞書型変数名.values()とか、辞書型変数名.items()と記述することで値やキーと値の組み合わせにアクセスすることができるんですね。
ファイル存在、ディレクトリ判定、サイズ0判定するifのサンプル
#!/usr/bin/python3 import os myfile='./sample.tx' # ファイルやディレクトリが存在するかどうか判定 if( os.path.exists(myfile) ): print( "found %s" % myfile ) # ファイルサイズが0かどうか判定 if( os.stat(myfile).st_size == 0): print( "%s size is 0" % myfile ) # ファイルかどうか判定 if( os.path.isfile(myfile) ): print( "%s is file" % myfile ) # ディレクトリかどうかかどうか判定 if( os.path.isdir(myfile) ): print( "%s is directory" % myfile )
ファイルの情報を判定するには、import osを実行したあと、os.path.existsなどを使用します。
同ディレクトリにサイズ0のsample.txtファイルを作成してから実行するとこうなります。
found ./sample.txt ./sample.txt size is 0 ./sample.txt is file
なお、サイズ判定のos.stat(ファイルパス).st_sizeは、ファイルが存在しない場合に実行するとNo such file or directoryエラーになります。そのため、事前にファイル存在チェックが必要です。
FileNotFoundError: [Errno 2] No such file or directory: './sample.txt'
Pythonの三項演算子のifサンプル
三項演算子を使うと、if、elseを使った計算式を1行で記述できます。使い方によってはコードの処理内容が直感的にわかりにくくなり、可読性が落ちるので注意が必要です。コメント文などを付け加えると良いでしょう。
ifが使えない場所で条件分岐したい…という場合に使われることもあります。たとえば、lambda式と三項演算子を組み合わせるケースがあります。
使い所としては、似たようなif分がズラッと続くようなケース。スッキリ短く記述することができます。
#!/usr/bin/python3 # a = 1 の場合 a<10なので、x=a*2 a = 1 x = a bk copyimages.sh createexport.sh exportfile_from_input.sh font getimagefromblogdir.sh imagemojiire.py imagemojiire.sh imagemojiire.sh.org images importtxt maketitlefromh3.sh memo mizumashi_image.sh oldexport oldimages oldimport outputimages shuffle_image.sh title.txt title.txt.org wk 2 if a < 10 else a print( x ) # a = 20 の場合 a>10なので、x=a a = 20 x = a bk copyimages.sh createexport.sh exportfile_from_input.sh font getimagefromblogdir.sh imagemojiire.py imagemojiire.sh imagemojiire.sh.org images importtxt maketitlefromh3.sh memo mizumashi_image.sh oldexport oldimages oldimport outputimages shuffle_image.sh title.txt title.txt.org wk 2 if a < 10 else a print( x ) # str = "cat" の場合 x="neko" str = "cat" x = "neko" if str == "cat" else "Doubutsu" print( x ) # str = "dog" の場合 x="Doubutsu" str = "dog" x = "neko" if str == "cat" else "Doubutsu" print( x )
実行するとこうなります。
2 20 neko Doubutsu
なお、elseの箇所にさらに三項演算子を記述すると、elifを三項演算子で記述できます。しかし、処理内容を頭で追えなくなってくるので控えたほうが良いでしょう。
pythonのif文まとめ
- pythonのif文は条件分岐が可能。if~elif~elseで記述する
- 配列とinを組み合わせて、配列内の存在判定が可能
- ファイルやディレクトリの存在判定やサイズ判定には、os.pthを組み合わせる
- 三項演算子を使うと、if~elif~elseを1行で記述できる