複合文の使い方(if_while_for)

用語説明

  • クローズ(clause)
    • 処理ブロックのこと。
  • ヘッダ(header)
    • 条件式を記載する部分のこと。
  • エクスプレッション(expression)
    • 条件式のこと。
    • ここではブール演算(True or False)の式と理解しておけばよい。
  • スイート(suite)
    • ここでは「条件式が True の時に実行される処理のこと」と理解しておけばよい。

便宜上記載したが、それぞれの名前は覚えなくてもたぶん不自由しない。

# ------------------------------ clause(start)
# header
if a < b: # expression
    # suite
    print('aはbより小さいです。')
# ------------------------------ clause(end)
# ------------------------------ clause(start)
# header
elif a > b: # expression
    # suite
    print('aはbより大きいです。')
# ------------------------------ clause(end)

if 文

条件式の実行結果が True(条件を満たしている)時に、そのスイートを実行する。

条件式は、戻り値が bool 型であれ何でも使える。

サンプルコード(if 文)

def study_if_statement(a, b):
    print("a = {}, {}".format(a, type(a)))
    print("b = {}, {}".format(b, type(b)))

    if type(a) == type(b):
        if type(a) is str:
            if a == b:
                print("'a' and 'b' are the same string.")
            else:
                print("'a' and 'b' are different strings.")
        elif type(a) is int:
            if a < b:
                print("'a' is smaller than 'b'.")
            elif a > b:
                print("'a' is larger than 'b'.")
            elif a == b:
                print("'a' and 'b' are equal.")
        else:
            print("Types 'a' and 'b' are other than 'str' and 'int'.")
    else:
        print("'a' and 'b' are different types.")

動作確認コード

print("test_01")
a = "apple"
b = "orange"
study_if_statement(a, b)
print("end")

print("test_02")
a = 10
b = "orange"
study_if_statement(a, b)
print("end")

print("test_03")
a = 10
b = 20
study_if_statement(a, b)
print("end")

実行結果

test_01
a = apple, <class 'str'>
b = orange, <class 'str'>
'a' and 'b' are different strings.
end
test_02
a = 10, <class 'int'>
b = orange, <class 'str'>
'a' and 'b' are different types.
end
test_03
a = 10, <class 'int'>
b = 20, <class 'int'>
'a' is smaller than 'b'.
end

while 文

条件式の実行結果が True(条件を満たしている)の間は、延々とループして処理を続ける。

主に処理回数が不定の時に使用する。

サンプルコード(while 文)

def study_while_statement():
    import random
    word = [
        'リンゴ',
        'ゴリラ',
        'ラッコ',
        'コアラ',
        'ラジオ',
    ]
    i = random.randint(0, len(word)-1)
    count = 1
    # NOTE: リンゴが出るまでループする(リンゴ以外の時はTrueなので)
    while word[i] != "リンゴ":
        i = random.randint(0, 3)
        print(count, '回目:', word[i])
        count += 1
    print(count, "回目に引き当てました。終了します。")

実行結果(例)

1 回目: コアラ
2 回目: リンゴ
3 回目に引き当てました。終了します。

for 文

決まった回数だけ処理をループしたい時に使用する。

構文

for 変数 in オブジェクト:
    実行する処理

break

実行中のループを抜ける。

continue

実行中のループの先頭に戻る。

for 文 に関連する range 関数の説明

range(stop)

動作の確認

print(list(range(3)))

実行結果

[0, 1, 2]

range(start, stop)

動作の確認

print(list(range(10, 13)))

実行結果

[10, 11, 12]

range(start, stop, step)

動作の確認

print(list(range(0, 10, 3)))

実行結果

[0, 3, 6, 9]

step にはマイナスも使用できる。

print(list(range(10, 0, -3)))

実行結果

[10, 7, 4, 1]

便利な機能

in の後にリストを指定すると、1要素ずつデータを取り出してくれる。

word = ['リンゴ', 'ゴリラ', 'ラッパ']
for name in word:
    print(name)

実行結果

リンゴ
ゴリラ
ラッパ

サンプルコード(for 文)

# study  of "for statement"

import random

def create_random_number_list():
    """Create a list with 10 random numbers.

    Returns:
        list: Random numbers.
    """
    random_number_list = []
    for n in range(10):
        generat = random.randint(0, 99)
        random_number_list.append(generat)
    return random_number_list

def is_even_number(num: int):
    """Determine even and odd numbers.

    Args:
        num (int): Any number.

    Returns:
        bool: Even is True. Odd is False.
    """
    if num % 2 == 0:
        return True
    else:
        return False

def confirm_even_odd(random_number_list):
    """Determine even or odd numbers and output.

    Args:
        random_number_list (list): Any list of numbers.
    """
    for index in range(len(random_number_list)):
        if is_even_number(random_number_list[index]) is True:
            print(random_number_list[index], ": 偶数(Even)")
            continue
        else:
            print(random_number_list[index], ": 奇数(Odd)")

def even_break(random_number_list):
    """'break' on the first even number.

    Args:
        random_number_list (list): Any list of numbers.
    """
    for index in range(len(random_number_list)):
        if is_even_number(random_number_list[index]) is True:
            print("First even number found:", random_number_list[index])
            print("index:", index)
            found = True
            break
        else:
            found = False
    if found is False:
        print("There was no odd number.")

def study_for_statement():
    random_number_list = create_random_number_list()
    confirm_even_odd(random_number_list)
    even_break(random_number_list)

if __name__ == "__main__":
    study_for_statement()

実行結果(例)

51 : 奇数(Odd)
73 : 奇数(Odd) 
65 : 奇数(Odd) 
99 : 奇数(Odd) 
50 : 偶数(Even)
1 : 奇数(Odd)
93 : 奇数(Odd)
10 : 偶数(Even)
95 : 奇数(Odd)
89 : 奇数(Odd)
First even number found: 50
index: 4

コードの補足説明

  • 0~99のランダムな数字を10個生成してリストにまとめる。
  • 生成した数字が偶数か奇数かを判定して表示する。
  • リストの中身を先頭から確認して、最初に偶数が出現したのがリストの何番目かを表示する。

ちなみに、偶数、奇数の判定は、プログラミングの基礎らしいよ。