Skip to content

制御構文#

一般的にプログラムの構造は以下のように分類されます。

  • 順次 : 記述された順に処理を実行
  • 選択 : 条件によって処理を分岐
  • 反復 : 特定の処理を繰り返し実行

順次・選択・反復を組み合わせながらプログラムを組み立てていく手法のことを構造化プログラミングといいます。 Python は上から順番にプログラムを実行していきます(順次)。選択・反復はそれぞれ if文、while または for文にて実現されています。

if文#

if文は条件分岐をおこなうための文法です。if / elif / else の後に続く条件式の結果が True もしくは False であるかを評価し、True の場合に以降の処理を実行します。言葉で示すと以下のとおりです。

if 条件式1:
    処理条件式1  True の場合に実行される
elif 条件式2:
    処理条件式2  True の場合に実行される
else:
    処理すべての条件式がFalseの場合に実行される

条件式は比較演算子、論理演算子を使用します。

比較演算子 説明
a > b aがbより大きい
a <> b aがbより小さい
a >= b aはb以下
a <= b aはb以上
a==b aとbが等しい
a!=b aとbは等しくない
a is b aはbである
a is not b aはbではない
a in b aはbに含まれる
a not in b aはbに含まれない

論理演算子 説明
a and b a も b 真であれば真
a or b a または b が真であれば真
not a a が偽であれば真

三項演算子#

Python の三項演算子はif elseを使用して記述します。 三項演算子を用いることで、条件により代入する値を変えたい場面で、 代入式をすっきり記述することができます。

  • 構文 変数 = 条件がTrueのときの値 if 条件 else 条件がFalseのときの値

  • age = 26
    # age = 17
    adult = "大人です。" if age >= 18 else "未成年です。"
    print(adult)
    

while 文#

while 文は条件式がtrue の場合に繰り返し処理を行います。

while 条件式:
    処理

以下はage 変数が20までの間繰り返し処理を行う例です。

age = 0
while age < 21:
    print(f"今年は{age}歳です。")
    if age == 20:
        print("成人おめでとう!")
    age += 1

for 文#

リストや辞書などのデータ型はイテラブルなオブジェクトです。 イテラブルなオブジェクトとは繰り返し可能なオブジェクトです。 イテラブル名オブジェクトに対して繰り返し処理を行うには for 文を用います。

以下のコードでは、0 - 9 までの数字を格納したリストを生成し、繰り返し数字を取り出して、 print しています。

sample_list = list(range(10))

for i in sample_list:
    print(i)

break#

ループの際に特定の処理でループを抜けるには break 文を記述します。

for i in range(21):
    if i == 10:
        break
    else:
        print(i)

continue#

特定の条件の場合に処理をスキップするにはcontinue 文を記述します。

for i in range(20):
    if i % 2 == 0:
        print(f"{i} は偶数")
    else:
        continue

for 文 - list#

enumerate関数#

for 文と enumerate()関数を組み合わせて使うと、ループの中でリストやタプルなどの イテラブルオブジェクトの要素と同時にインデックスを取得することができます。

sample_list = ["apple", "banana", "Strawberry"]

for i,word in enumerate(sample_list):
    print(i,word)

複数のリストを同時に処理#

複数のリストを同時に処理するにはzip 関数を使用します。

menu = ['Shrimp', 'Crab', 'Squid', 'Tuna']
prices = [100, 300, 150, 200]

for sushi, price in zip(menu, prices):
    print(f"{sushi} : {price}")

itertools.zip_longest()関数

リスト内の要素に差がある場合には、数が少ない方に合わされ、数が多い方の リストの要素は処理されません。itertools.zip_longest() 関数を用いることで 足りない分の要素が埋められます。 デフォルトではNone で埋められ、fillvalue引数で埋める値を指定できます。

from itertools import zip_longest

menu = ['Shrimp', 'Crab', 'Squid', 'Tuna']
prices = [100, 300, 150]

for sushi, price in zip_longest(menu, prices):
    print(sushi, price)

# Shrimp 100
# Crab 300
# Squid 150
# Tuna None

for sushi, price in zip_longest(menu, prices,fillvalue=200):
    print(sushi, price)

# Shrimp 100
# Crab 300
# Squid 150
# Tuna 200

リストを逆順に処理#

menu = ['Shrimp', 'Crab', 'Squid', 'Tuna']

for sushi in reversed(menu):
    print(sushi)
# Tuna
# Squid
# Crab
# Shrimp

内包表記#

リスト内包表記とはリスト内の各要素に処理を行い、新たなリストを得る記述の方法です。

例えば、テキストを読み込んでリストに格納したが、改行コードを消したい場合にすっきりとした記述で書けます。

menu = ['Shrimp\n', 'Crab\n', 'Squid\n', 'Tuna\n']
re_menu = [sushi.replace("\n","") for sushi in menu]
print(menu)
print(re_menu)

# ['Shrimp\n', 'Crab\n', 'Squid\n', 'Tuna\n']
# ['Shrimp', 'Crab', 'Squid', 'Tuna']

if 文と組み合わせた内包表記#

内包表記にさらに、if 文を組み合わせることができます。 以下の例ではprice_list内の200 以下の料金をif 文によって判別し、 新たなリストでは含まれないようにしています。

price_list = [100, 150, 180, 200, 300, 400, 500]
high_price = [price for price in price_list if price > 200]
print(high_price)

# [300, 400, 500]

for文 - 辞書#

for文 - 集合#