Python_制御構文
if文
if文の記述
if文は、式が真であればインデントされたブロックを実行します。
if文の末尾には「:」を記述し、括弧を使わないのがPythonの特徴です。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
import argparse
def condition(arg):
# if文はインデントがブロックを示します。
if len(arg) == 0:
print("This is empty string")
return -1
# else文
if (type(arg) is int):
print("This is integer")
else:
print("This is not integer")
# elif文
if arg.isalpha():
print("This is alphabet")
elif arg.isdigit():
print("This is numbers")
else:
print("This is alphabet and numbers")
return 0
def main():
parser = argparse.ArgumentParser()
parser.add_argument("arg", help="argument")
args = parser.parse_args()
rc = condition(args.arg)
return rc
if __name__ == "__main__":
sys.exit(main())
その他の記述方法
X以上Y未満という記述が可能です。
複数条件指定には「and,or,not」を用います。
# if文を一行で記述することができます。
if arg is None: return -1
num = int(arg)
# 括弧をつけることができます。(pylintで警告されますが)
if (num > 0):
print("Greater than zero")
# X以上Y未満という記述ができます。
if 0 < num < 10:
print("Zero or more and less than 10")
# and条件
if num >= 100 and num < 200:
print("100 or more but less than 200")
# or条件
if num < 100 or num >= 200:
print("Less than 100 or more than 200")
# not条件
if not num > 0:
print("Less than zero")
後置のif~else
後置することで、3項演算子のように記述することができます。
# 2行で記述すると以下の通りです。
if val = "success" : rc = True
else: rc = False
# result = 'true_value' if 条件 else 'false_value'の形式で記述できます。
rc = True if val == "success" else False
for文
Pythonでは「for A in B:」と記述します。
for文においてもインデントがブロックを意味します。
配列要素を走査する。
配列要素を順番にアクセスします。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
def main():
# 配列の数だけ繰り返す。
langs = ['Japanese', 'English', 'French']
for lang in langs:
print(lang)
return 0
if __name__ == "__main__":
sys.exit(main())
range()を用いる。
range関数を用いることで、指定回数文繰り返すことができます。
max = 10
for cnt in range(max):
print(cnt, end=" ") # 0 1 2 3 4 5 6 7 8 9
print("\n")
開始値と終了地を指定することもできます。
for num in range(100, 105):
print(num, end=" ") # 100 101 102 103 104
print("\n")
第3引数を指定すると加算値を指定できます。
for num in range(0, 1000, 300):
print(num, end=" ") # 0 300 600 900
print("\n")
breakとcontinue
break文で反復処理を抜け出せます。
for num in range(100):
print num
if num == 50
break
continue文で反復処理を次のステップへ移します。
for num in range(2, 100):
if num % 2 == 0:
print("even", num)
continue
print("odd", num)
while文
while文においてもインデントがブロックを意味します。
Pythonでは「while〜else」という記述があります。while内で「else」を記述することにより、条件式がFalse(偽)の時にelse以下の処理を実行することができます。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
def main():
# 通常のwhile文
num = 0
while (num < 5):
print(num)
num += 1
# 通常のwhile else文
num = 0
while (num < 5):
print(num)
num += 1
else:
print("finish")
# breakしたらelseには到達しません。
num = 0
while (num < 5):
if num > 3: break
print(num)
num += 1
else:
print("Not reachable!")
# elseのみ実行することができます。
while False:
print("Not reachable!")
else:
print("Reachable!")
return 0
if __name__ == "__main__":
sys.exit(main())
switch文
Pythonにswitch文はありません。
辞書データでアクセスするなど工夫が必要です。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
def main():
key = 'b'
def func1():
print(sys._getframe().f_code.co_name)
def func2():
print(sys._getframe().f_code.co_name)
key_dict = {'a': func1, 'b': func2}
key_dict.get(key)() # func2
return 0
if __name__ == "__main__":
sys.exit(main())