(1) for文とif文
for文の中のif文
for文のループ中に特定の条件を満たしたときのみ処理を実行したい場合には、for文の中にif文をネストします。
for i in range(回数):
if 条件式:
#処理
次の例では、1〜9のうち、3の倍数(3で割って余りが0)のときのみ、iの値を出力するプログラムです。
for i in ragne(1, 10):
if i % 3 == 0:
print(i)
3
6
9
(2) 二重のfor文
for文のネスト
for文の中に別のfor文をネストすることで、二重の繰り返し構造を書くことができます。外側のループではループ変数にiを、内側のループではループ変数にjを用いています。
for i in range(回数):
for j in range(回数):
# 処理
次の例は、for文の中にfor文をネストして九九表を作成します。コード中の"␣"は半角スペースを表します。
for i in range(1, 10):
for j in range(1, 10):
if i * j < 10: # 積が10未満の場合十の位を空欄にする
print("␣", end="") # ※1
print(i * j, end="␣") # ※2
print() # ※3
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
- print("␣", end="")
end=""を指定すると、出力内容の直後に何も出力しません。デフォルトでは改行文字(\n)が入りますが、この場合は改行されないようにします。(␣は半角スペースを示す表記なので、実際のコードには半角スペースを入れてください)
- print("...", end="␣")
end="␣"を指定すると、出力内容の直後に半角スペース1つ分が出力されます(␣は半角スペースを示す表記なので、実際のコードには半角スペースを入れてください)。
- print()
print関数に引数を指定しなければ、末尾の文字のみ、つまりデフォルト値である改行コード(\n)のみを出力します。
(3) フラグ
フラグとは
特定の条件がのちの処理の分岐を決定するというようなときに、特定の条件やその結果を変数に代入しておいて、あとからその変数の値を参照します。このような変数をフラグといい、flagやflgといった変数名のbool型(真偽値ブール型:TrueまたはFalse)で使われます。flagは旗を表す英単語が由来であるため、条件を満たしたときにフラグを立てるという表現をします。
また、ゲームにおいてステージクリアの条件などの記録として用いられるため、条件達成のことを「フラグが立った」といい、この意味から派生して、小説や映画などにおいてお決まりのパターン通りの展開を予想させることフラグというようになりました。例えば、戦争に行く兵士が帰還したら恋人と結婚するんだと言うと、その後の闘いのシーンで戦死することが多いことから、このような展開を「死亡フラグ」が立ったと言うようになりました。
フラグ変数の命名
単純なプログラムなら変数名にflagを用いても問題はないですが、flagの値がTrueだとどのような条件になっているか判別が難しい場合、逆の理解をしてしまう恐れがあります。そのため、現実的な変数名の付け方としてはis_xxxxxをよく用います。例えば、偶数ならis_even_numberや素数ならis_prime_numberなどとすることが推奨されています。
フラグの例
閏年の判定をフラグを用いて書いてみると、次のようになります。閏年かどうかを判別するフラグに変数is_leap_yearを用いています(leap yearは閏年の意味)。
year = 2024
is_leap_year = False # 閏年フラグ
if year % 4 == 0: # ① 4で割り切れれば閏年フラグをTrueに
is_leap_year = True
if year % 100 == 0: # ② 100で割り切れれば閏年フラグをFalseに
is_leap_year = False
if year % 400 == 0: # ③ 400で割り切れれば閏年フラグをTrueに
is_leap_year = True
if is_leap_year == True:
print(year, "年は、閏年です")
else:
print(year, "年は、平年です")
2024 年は、閏年です。
yearに1900,2000,2023を代入したとき、それぞれ閏年フラグ is_leap_yearの値は①〜③のif文のあとでどのような値になっているか考えてみましょう。