(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
      
  1. print("", end="")
  2. end=""を指定すると、出力内容の直後に何も出力しません。デフォルトでは改行文字(\n)が入りますが、この場合は改行されないようにします。(␣は半角スペースを示す表記なので、実際のコードには半角スペースを入れてください)
  3. print("...", end="")
  4. end=""を指定すると、出力内容の直後に半角スペース1つ分が出力されます(␣は半角スペースを示す表記なので、実際のコードには半角スペースを入れてください)。
  5. print()
  6. print関数に引数を指定しなければ、末尾の文字のみ、つまりデフォルト値である改行コード\n)のみを出力します。

(3) フラグ

フラグとは

特定の条件がのちの処理の分岐を決定するというようなときに、特定の条件やその結果を変数に代入しておいて、あとからその変数の値を参照します。このような変数をフラグといい、flagflgといった変数名の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 年は、閏年です。

year190020002023を代入したとき、それぞれ閏年フラグ is_leap_yearの値は①〜③のif文のあとでどのような値になっているか考えてみましょう。