1.3.1 制御フロー
Pythonの条件分岐やループなど一般的な制御フローについて
1.3.1.1 if ~ elif, else
もっともよく利用される制御フローがif文です。条件を評価し、Trueであれば続くブロックのコードを実行する。
x = -3
if x < 0:
print('xは負の値です')
"""
条件が複数ある場合、elif 文のブロックを追加します。
また、どの条件にも合わない場合にはelseブロックを追加します。
"""
x = 9
if x < 0:
print('xは負の値です')
elif x == 0:
print('xは0です')
elif 0 < x < 10:
print('xは0より大きくて10より小さいです')
else:
print('xは10以上の値です')
if ~ elif~elseでは上から評価され、いずれかの条件がTrueとなる場合、以降のelifもしくはelseのブロックは評価されずスキップされます。ifではandやorを使った複合条件を評価することができます。それぞれの条件は左から右に順番に評価され、Trueになるものが見つかった時点で後続の条件の評価はスキップされます。
1.3.1.2 forループ
forループはリストやタプルといった集合的データ構造やイテレータ1に対して、それぞれの要素を順番に処理するために用いられます。
forループの基本的な書き方は次のような形です。
list_val = [x for x in range (10)] #list_val = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list_val)
for value in list_val:
# それぞれの要素に対して処理する
print(value)
forループの中でcontinueを用いると、繰り返しブロック内でそれ以降の命令をスキップし、次の繰り返しに進みます。
amount = [1, None, None, 4, -10, 5]
total = 0
for cnt, value in enumerate (amount, 1): #インデックスと要素を取得するenumerate ()
#インデックスは1から始める
if value is None:
print (cnt, '要素:', value, '空値をスキップします')
continue
else:
print (cnt, '要素:', value)
total += value
print ('値の合計', total)
forループの中でbreakを用いるとループから抜け出しループが終了します。
breakが属するブロックのループだけが終了します。
amount = [1, 2, -1, 4, -10, 5]
total = 0
for cnt, value in enumerate (amount, 1): #インデックスと要素を取得するenumerate ()
#インデックスは1から始める
if value < 0:
print (cnt, '要素:', value, 'マイナスの値が見つかったので,ループを終了します!')
break
else:
print (cnt, '要素:', value)
total += value
print ('値の合計', total)
1.3.1.3 Whileループ
whileループ文には、与えられたループ条件とループ対象のコードブロックを記述します。
与えられた条件がFalseになるまで、もしくはループがbreakにより終了させられるまで、そのブロックが繰り返されます。
x = 100
total = 2
while x > 0:
if total > 10000:
break
total *= x
print (x, total)
x = x // 2
1.3.1.4 pass
passは、何もアクションしない場合に使用します。
コードブロック内で必要なアクションがないとき、またすぐには実装できないコードのプレースホルダー2が必要な場面などで用いられます。
amount = [1, 2, -1, 4, -10, 5]
total = 0
for cnt, value in enumerate (amount, 1): #インデックスと要素を取得するenumerate ()
#インデックスは1から始める
if value < 0:
pass
else:
print (cnt, '要素:', value)
total += value
print ('値の合計', total)
1.3.1.5 range
range関数は整数列を生成する文字列、リスト、タプルなどのように要素を順番に取り出せるオブジェクトを返します。
rangeの引数には始点、終点、ステップ(増分・減分)を与えることができます。
print(list(range(10)))
print(list(range(0, 10, 2)))
print(list(range(10, 1, -2)))
rangeは任意の巨大な値を扱うことができますが、メモリ消費量はとても小さい。
total = 0
for i in range(1000):
total += i
print('合計:', total)
1.3.1.6 三項演算子
三項演算子とは、「if ~ else ~」を一文で書きたいときに使う演算子です。
書式は次の通りです
value = true_expr if condition else false_expr
conditionの条件を評価し、真の場合にtrue_expr式を実行する、偽の場合にfalse_expr式を実行する。
わかりやすく書き直すと
if condition:
value = true_expr
else:
value = false_expr
簡単な例を1つ
x = 1000
print('100以上です') if x >= 100 else print('100より小さい')