Python入門トップページ


目次

  1. プログラミング言語
  2. Anaconda - Jupyter Notebook / JupyterLab の環境設定
  3. Python の基礎
  4. リスト,タプル,辞書,集合
  5. 再び Jupyter Notebook の操作
  6. Python の制御構文
    1. コメント
    2. if による条件分岐
    3. while による繰り返し
    4. for による繰り返し
    5. range による数値シーケンス
    6. enumerate による繰り返し
    7. zip による繰り返し
  7. 関数
  8. 便利な関数など
  9. リストの内包表記
  10. 多次元リスト
  11. クラス
  12. 演習問題
  13. 雑多な情報

Python の基礎

Python の制御構文

while による繰り返し

0から9までの数値を表示するプログラムは,while を使って次のように書くことができる.while i < 10i < 10 は i が 10 より小さい間は while の中身を繰り返すことを意味する.また,i += 1i = i + 1 と同じ意味で,i に 1 を加える(i をインクリメントする)ことを意味する.したがって,while の直前で i を 0 で初期化し,while の中で 0 を表示し,i を 1 にインクリメントする.まだ,i は 10 未満であるので,1, 2, ... と順に表示する.i が 9 で表示された後,10 にインクリメントし,また while に戻るが,条件を満たさなくなったので,end を表示する行(5行目)に処理が移動する.

i = 0
while i < 10:
    print(i)
    i += 1
print('end')
0
1
2
3
4
5
6
7
8
9
end

繰り返しの中で更に繰り返しを行う,つまり2重ループを記述することもできる.例えば九九の表を出力するためには次のようなコードを入力すれば良い.通常 print("文字列") で出力すれば改行されるが,print("文字列", end="") と記述すれば,改行せずに引き続き同じ行に出力することができる.

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]

i = 0
while i < len(x):
    j = 0
    while j < len(y):
        seki = x[i] * y[j]
        print(seki, end="") # 改行しない
        j += 1
    i += 1
    print("") # 改行
123456789
24681012141618
369121518212427
4812162024283236
51015202530354045
61218243036424854
71421283542495663
81624324048566472
91827364554637281

上の例では出力が連続するので,九九の表には見えない.出力が4桁ずつになるように f 文字列を使って書式を設定することもできる.

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]

i = 0
while i < len(x):
    j = 0
    while j < len(y):
        seki = f"{x[i] * y[j]:4d}" # 4桁ずつ
        print(seki, end="")
        j += 1
    i += 1
    print("")
   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

なお,forrange を使うとより簡単に九九の表を作成することも可能です.

目次に戻る

break によるループ脱出

ある条件になるまでは無限に繰り返し処理を行うような場合は,while True: で無限ループを作成し,break によってループから脱出することができます.例えば,scores リストから取り出して表示したい要素のインデックスをキーボードから入力し続け,「q」が入力されたら処理を終了するようなプログラムを作成します.

scores = [10, 30, 25, 20]
while True:
    x = input(f'0 から {len(scores)-1} までの整数を入力してください(qで終了します): ')
    if x == 'q':
        break
    pos = int(x)
    print(scores[pos])
print('終了しました')
0 から 3 までの整数を入力してください(qで終了します): 0 ⏎
10
0 から 3 までの整数を入力してください(qで終了します): 1 ⏎
30
0 から 3 までの整数を入力してください(qで終了します): -2 ⏎
25
0 から 3 までの整数を入力してください(qで終了します): 3 ⏎
20
0 から 3 までの整数を入力してください(qで終了します): q ⏎
終了しました

なお,0 から 3 以外(実際には -4 から 3 以外)の数値や q 以外の文字を入力した場合にはエラーが表示されてプログラムの実行が停止してしまいます.ユーザからの入力を受け付ける処理などを行う場合には,意図せずプログラム実行が停止しないように例外処理を記述する必要があります.また,無限ループから脱出できなくなり,プログラムが暴走してしまった場合は,Jupyter Notebook の「カーネル」から「再起動」を実行してください.Windows の Anaconda Prompt や Anaconda PowerShell, Mac の terminal などで実行している最中に無限ループで暴走してしまった場合は,Ctrl + C を押して強制終了してください.

目次に戻る

continue によるループ継続

繰り返しの最中で,ある条件に当てはまるときは処理せず,ループを継続したいような場合は,continue を使うと良いでしょう.例えば,キーボードから入力された数値が奇数であれば 2 倍して表示するが,偶数なら何もせずに次の入力を受け付けるというようなプログラムは次のようになります.

while True:
    x = input('奇数を入力してください(qで終了します): ')
    if x == 'q':
        break
    if int(x) % 2 == 0:
        continue
    print(int(x) * 2)
print("終了しました")
奇数を入力してください(qで終了します): 1 ⏎
2
奇数を入力してください(qで終了します): 3 ⏎
6
奇数を入力してください(qで終了します): 5 ⏎
10
奇数を入力してください(qで終了します): 2 ⏎
奇数を入力してください(qで終了します): 4 ⏎
奇数を入力してください(qで終了します): 9 ⏎
18
奇数を入力してください(qで終了します): q ⏎
終了しました

目次に戻る