0から9までの数値を表示するプログラムは,while
を使って次のように書くことができます.while i < 10
の i < 10
は i が 10 より小さい間は while の中身を繰り返すことを意味します.また,i += 1
は i = 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
なお,for
と range
を使うとより簡単に九九の表を作成することも可能です.
ある条件になるまでは無限に繰り返し処理を行うような場合は,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 / Jupyter Lab の「カーネル」から「再起動」を実行してください.Windows の Anaconda Prompt や Anaconda PowerShell, Mac の terminal などで実行している最中に無限ループで暴走してしまった場合は,Ctrl + C を押して強制終了してください.
繰り返しの最中で,ある条件に当てはまるときは処理せず,ループを継続したいような場合は,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 ⏎ 終了しました