解答例:練習問題_4_10 ジェネレータ関数 素数
次のジェネレータ関数は素数です。引数 n は自然数、戻り値が n 以上の素数を小さい順番に返す関数prime_num_g(n, size = 10) です。n から順番に素数判定を行い、素数が出現したところで yield 文を使用します。繰り返し数が不定なのでここでは while のループ文を使っています。
def prime_num_g(n, size = 10):
# n 以上の素数を小さい順に戻す
num, cnt = n, 0
while size - cnt:
for x in range(2, int(num**0.5)+1):
if num % x == 0:
break
else: # nが素数
yield num
cnt += 1
num += 1
以下はfor 文と while 文 + next 関数を使用した確認方法です。
for n in prime_num_g(1000, 5):
print(n, end=', ')
1009, 1013, 1019, 1021, 1031,
g = prime_num_g(1)
while True:
try:
print(next(g), end=', ')
except StopIteration:
break
1, 2, 3, 5, 7, 11, 13, 17, 19, 23,