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())


関連ページ