(1) while文とif文

ループ変数の値によって条件分岐

次のコードは、n = 1からはじめて、nを1ずつ大きくしていき、4と5で割り切れる最小の整数を求める例です。nを1ずつ大きくしていくごとに、「4でも5でも割り切れません」,「4で割り切れます」,「5で割り切れます」と表示し、最後は「4と5で割り切れます」と表示します。


        n = 1

        while n % 4 != 0 or n % 5 != 0:
          if n % 4 == 0:
print(n, "は4で割り切れます") elif n % 5 == 0:
print(n, "は5で割り切れます") else:
print(n, "は4でも5でも割り切れません") n = n + 1 print("よって、", n, "は4と5で割り切れます。")

        1 は4でも5でも割り切れません
        2 は4でも5でも割り切れません
        3 は4でも5でも割り切れません
        4 は4で割り切れます
        5 は5で割り切れます
        6 は4でも5でも割り切れません
        7 は4でも5でも割り切れません
        8 は4で割り切れます
        9 は4でも5でも割り切れません
        10 は5で割り切れます
        11 は4でも5でも割り切れません
        12 は4で割り切れます
        13 は4でも5でも割り切れません
        14 は4でも5でも割り切れません
        15 は5で割り切れます
        16 は4で割り切れます
        17 は4でも5でも割り切れません
        18 は4でも5でも割り切れません
        19 は4でも5でも割り切れません
        よって、 20 は4と5で割り切れます。
      

この例のwhile文の条件式はn % 4 != 0 or n % 5 != 0となっていますが、not(n % 4 == 0 and n % 5 == 0)と変えても同様に求められますので確認してみましょう。

コラッツ予想

コラッツ予想($3n+1$問題)は、1937年ロタール・コラッツによって提案された整数に関する未解決問題のひとつです。

任意の正の整数 $n$に対して、以下の操作を行います。
・$n$が偶数なら、$n$を2で割る。
・$n$が奇数なら、$n$を3倍して1を足す。
これを繰り返し行うと、どんな初期値($n$)から始めても、必ず1になります。

例えば、$n = 6$から始めると、6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1となります。
コラッツ予想はコンピュータによる解析的に多くの数字で成り立つことがわかっているが、数学的に証明されていないため、未解決の問題であるとされています。


        n = 6
        print(n)

        while n > 1:
          if n % 2 == 0:
            n = n // 2
          else:
            n = 3 * n + 1
          print(n)
      

        6
        3
        10
        5
        16
        8
        4
        2
        1
      

(2) break文

break文とは

break文は、繰り返し処理を中断しループを終了させることができます。


        while 条件式:
          # 繰り返しの処理
          if 終了条件:
            break
      

次の例では、iを0から1つずつ増やしていき、iが3になったらbreakします。


        # iが3になったらbreakする
        i = 0
        while i < 10:
          if i == 3:   # iが3になったら
            break
          print(i, end=" ")
          i = i + 1
      
0 1 2
  1. print("...", end=" ")
  2. print関数の引数にend="..."を指定すると、末尾に出力する文字を指定することができます。何も指定しなければ(デフォルトでは)改行コード\n)となりますが、上の例のように半角スペースを指定すると、改行せずに半角スペースが出力されます。c.f. 1-2. 変数と画面出力 (5)print関数の使い方 末尾文字の設定

意図的な無限ループ

while文は指定した条件を満たしているあいだ処理を繰り返す構文です。この条件にTrueを指定すると、無限ループとなります。意図的に無限ループにする場合には、while文の中にif文を用いて終了条件を指定してbreak文でループから抜け出す操作が必要です。


        while True:
          # 繰り返しの処理
          if 終了条件:
            break
      

次の例では、aの初期値が0で、aを2倍して1を足す操作を繰り返して、aの値が100より大きくなるまで繰り返します。


        a = 0

        while True:            # (break文が現れるまで)無限に繰り返す
          print(a, end=" ")  # aの値を出力
          a = a * 2 + 1      # aを2倍して1を足す
          if a > 100:        # aが100より大きくなったら
            break          # 繰り返しを終了

        print(a, end=" ")             # 最後にaを出力(この時点で100を超えている)
      
0 1 3 7 15 31 63 127

次の例では、ユーザーに入力を求め、exitと入力されるまで繰り返し入力を求めます。


        while True:
          user_input = input("何か入力してください(exitで終了): ")
          if user_input == "exit":
            break
          print("あなたが入力したのは:", user_input)
      

        何か入力してください(exitで終了): kaijo
        あなたが入力したのは: kaijo
        何か入力してください(exitで終了): school
        あなたが入力したのは: school
        何か入力してください(exitで終了): exit