前回はfor文による繰り返し処理の基本について学びました. 今回は繰り返し処理を途中で止めるbreak文と,処理をスキップするcontinue文について解説します.
break文を使うことでfor文の繰り返し処理を途中で止めることができます.
繰り返し処理の中にbreakと書くことでbreakに到達したらその繰り返し処理を打ち切ります.
例えば次のような問題を考えてみましょう.
import time
n = int(input())
start_time = time.time()
is_prime = True # 素数であると仮定しておく
# 素数かどうか判定する部分
for i in range(2,n):
if n%i == 0: # 割り切れるかの判定
is_prime = False # 割り切れた場合は素数でない
elapsed_time = time.time() - start_time
print("経過時間:",elapsed_time)
print(is_prime)
timeと書いてある部分は処理時間を計測するためのコードですので今は気にしないでください.
import time
n = int(input())
start_time = time.time()
is_prime = True # 素数であると仮定しておく
# 素数かどうか判定する部分
for i in range(2,n):
if n%i == 0: # 割り切れるかの判定
is_prime = False # 割り切れた場合は素数でない
break # 割り切れてしまったらそこで打ち切り
elapsed_time = time.time() - start_time
print("経過時間:",elapsed_time)
print(is_prime)
continue文を用いることでcontinue以降の処理をスキップすることができます. 実際のプログラムを見てみましょう.
for i in range(30):
if i%2 == 0:
continue # continueに到達するとそれ以降の処理は行わない
print(str(i) + "は奇数")
本当に余分な話です.素数の判定に興味がない人はスキップしていただいて構いません.
この部分を読んだからといって今後の解説が理解しやすくなるようなことは一切ありません.
先ほど素数の判定を行ったのですが,せっかくなので入力nまでの素数のリストが欲しい と思った人はいませんか?
先ほど作った素数判定プログラムを利用することで簡単に作れます.
# 素朴な素数判定
import time
n = int(input())
prime_list = []
start_time = time.time()
for num in range(2,n+1): # 2からnまでのすべての数に対して実行
# 素数かどうかを判定する部分
is_prime = True # 素数であると仮定しておく
for i in range(2,num):
if num%i == 0: # 割り切れるかの判定
is_prime = False # 割り切れた場合は素数でない
# 素数だったら素数のリストに追加する
if is_prime:
prime_list.append(num)
elapsed_time = time.time() - start_time
print("経過時間:",elapsed_time)
print(prime_list)
100を入力して挙動を確かめましょう.
import time
n = int(input())
num_list = [True for i in range(n+1)] # 長さn+1のリストを作る
prime_list = [] # 素数を追加するための空のリスト
num_list[0] = False # 0は素数でない
num_list[1] = False # 1も素数でない
start_time = time.time()
# 素数かどうかを判定する部分
for num in range(len(num_list)):
if num_list[num]:
for i in range(num*2,n+1,num):
num_list[i] = False # num*2 から n+1 までの numの倍数をFalseとする
elapsed_time = time.time() - start_time
print("経過時間:",elapsed_time)
# 素数のリストを作る部分
for i in range(n+1):
if num_list[i]: # もし素数であれば
prime_list.append(i) # 素数のリストに追加する
print(prime_list)
あまり大きな数字を入力すると "IOPub data rate exceeded." と表示されエラーになるので気を付けてください.
nが大きくなるとprime_listも膨大になるため,出力の処理が強制停止されます.
# 一番早いやつ
import time
n = int(input())
num_list = [True for i in range(n+1)]
prime_list = []
num_list[0] = False
num_list[1] = False
num_list[2] = True
start_time = time.time()
for num in range(int(len(num_list)**0.5)+1):
if num_list[num]:
for i in range(num*num,n+1,num):
num_list[i] = False
elapsed_time = time.time() - start_time
print("経過時間:",elapsed_time)
for i in range(n+1):
if num_list[i]:
prime_list.append(i)
print(prime_list)
10000000を入力して処理時間を比べてみましょう.
今回はbreak文とcontinue文について解説しました. break文による処理の打ち切りは頻繁に利用するためしっかりマスターしましょう. 次回はwhile文による繰り返し処理について解説します.