やり直しPython3(if文、 while文、for文)

2016-04-18(Mon) by Makoto Yamahira

Python3の勉強(5) if文、while文、for文

Python基礎勉強5日目です。今回はif文、while文、for文について。

if文

条件によって処理を分岐させたい時はif文を使う。
次のような形で使う。

if [真偽値1]:
   [真偽値1がTrueの場合の処理]
elif [真偽値2]:
   [真偽値2がTrueの場合の処理]
elif [真偽値3]:
   .
   .
   .
else:
   [全ての真偽値がFalseであった場合の処理]

elif, elseは省略しても良い。
少し固めのサンプルを書いてみる。

    >>> my_favorite_color = 'red'
    >>> is_red = my_favorite_color == 'red'    # my_favorite_color == 'red'の計算結果をis_redに代入
    >>> if is_red:
    ...     print('You like red.')
    ... else:
    ...     print('Do you like red?')
    ... 
    You like red.

「my_favorite_color == 'red'」で真偽値を求めておき(この場合True)、if文でこの値を使用している。 実際は真偽値を求める式をif文の中に直接書くことの方が多いと思う。

    >>> my_favorite_color = 'red'
    >>> if my_favorite_color == 'red':
    ...     print('You like red.')
    ... else:
    ...     print('Do you like red?')
    ... 
    You like red.

if文に真偽値ではない値を指定した場合は、真偽値にキャストされる。

    >>> if 'Hey!':
    ...     print('True')
    ... else:
    ...     print('False')
    ... 
    Tru
    >>> if []:
    ...     print('True')
    ... else:
    ...     print('False')
    ... 
    False

while文

while文で簡単な繰り返し処理ができる。
次のような形で使う。(elseは省略できる)

while [真偽値]:
    [内部処理]
else:
    [処理]

真偽値がTrueの間、内部処理が繰り返し実行される。
if文と同様、通常は真偽値を求める式を書いて使うことが多い。

    >>> sum = 0
    >>> count = 1
    >>> while sum < 100:
    ...     sum += count
    ...     count += 1
    ...
    >>> print(sum)
    105

breakでループを中止できる。

    >>> sum = 0
    >>> count = 1
    >>> while sum < 100:
    ...     sum += count
    ...     if count > 5:
    ...        break
    ...     count += 1
    ... 
    >>> print(sum)
    21

continueで次のイテレーションに飛ばせる。

    >>> sum = 0 
    >>> count = 0
    >>> while sum < 100:
    ...     count += 1
    ...     if count % 2 == 0:
    ...         continue
    ...     print(count)
    ...     sum += count
    ... 
    1
    3
    5
    7
    9
    11
    13
    15
    17
    19

elseを使うとbreakのチェックができる。
(else文のブロックはbreakでループを抜ける場合のみ実行されない)

    >>> sum = 0
    >>> count = 0
    >>> while sum < 100:
    ...    count += 1
    ...    if count > 10:
    ...        print(count)
    ...        break
    ...    sum += count
    ... else:
    ...    print("break文は実行されませんでした。")
    ... 
    11

for文

イテラブルなオブジェクト(リスト、タプル、辞書、集合、文字列等)の要素を一つずつ取り出して何らかの処理をしたい場合、for文が使える。
次のような形で使う。

    for [要素を入れる変数] in [イテラブルなオブジェクト]:
        [処理]
    else:
        [処理]

要素が入った変数を利用して値を取り出せる。

    >>> for color in ['red', 'yellow', 'green']:
    ...     print(color)
    ... 
    red
    yellow
    green

while文と同様にbreak、continue、elseが利用できる。

    >>> for color in ['red', 'yellow', 'green', 'white', 'blue']:
    ...     if color == 'yellow':
    ...         continue
    ...     elif color == 'white':
    ...         break
    ...     print(color)
    ... else:
    ...     print("breakされない場合にelse処理が実行されます")
    ... 
    red
    green

タプルを要素にもつイテラブルオブジェクトをループ処理してみる。

    >>> for color in [('No.1', 'red'), ('No.2', 'yellow'), ('No.3', 'green')]:
    ...     print(color[0] + ':' + color[1])
    ... 
    No.1:red
    No.2:yellow
    No.3:green

タプルのアンパックを使えば複数の変数も利用できる。

    >>> for color_no, color in [('No.1', 'red'), ('No.2', 'yellow'), ('No.3', 'green')]:
    ...     print(color_no + ":" + color)
    ... 
    No.1:red
    No.2:yellow
    No.3:green

実はタプル以外のシーケンスもアンパックできるためタプルである必要はないみたいだ。

    >>> for color_no, color in [['No.1', 'red'], ['No.2', 'yellow'], ['No.3', 'green']]:
    ...     print(color_no + ":" + color)
    ... 
    No.1:red
    No.2:yellow
    No.3:green

他の言語では一般的なカウンタを使ったループはrangeを使うと実現できる。

    >>> for i in range(0, 10, 1):    # 0から9まで1ずつ増加
    ...     print(i)
    ... 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

zip()関数を使うと複数のシーケンスオブジェクトの要素を同時に処理できる。

    >>> color_english = 'red', 'yellow', 'green'
    >>> color_japanese = '赤', '黄', '緑'
    >>> for e, j in zip(color_english, color_japanese):
    ...     print(e + ':' + j)
    ... 
    red:赤
    yellow:黄
    green:緑

ちなみにzip()関数が返す値はzipオブジェクトになる。
タプル等にキャストすることができる。

    >>> color_english = 'red', 'yellow', 'green'
    >>> color_japanese = '赤', '黄', '緑'
    >>> zip(color_english, color_japanese)
    <zip object at 0x101c1b148>

    >>> tuple(zip(color_english, color_japanese))
    (('red', '赤'), ('yellow', '黄'), ('green', '緑'))

勉強に使っている本はオライリーの「入門Python3」


Comments