문제

난수(random number)란 예측할 수 없는 임의의 수를 말한다. 파이썬에서는 random 모듈(11장)의 random.randint() 함수를 이용해 매개변수로 지정한 범위 사이의 난수를 구할 수 있다. 다음은 random.randint() 함수를 사용하는 예이다.

>>> import random          # random 모듈 임포트
>>> random.randint(0, 63)  # 0 이상 63 이하의 임의의 수
24

>>> random.randint(0, 63)
62

>>> random.randint(0, 63)
0

>>> [random.randint(0, 63) for _ in range(5)]  # 난수 5개의 리스트
[39, 38, 43, 46, 29]

random.randint() 함수를 이용해 무한한 개수의 난수를 꺼낼 수 있는 무한 난수 생성기를 만들어 보아라.

코드

import random

def infinity_random_generator(number_from, number_to):
    """number_from 에서 number_to 사이의 임의의 수를 무한히 생성하는 난수 생성기를 반환한다."""
    while True:
        yield random.randint(number_from, number_to)

# 함수의 동작 확인
random_numbers = infinity_random_generator(1, 20)
for i, random_number in zip(list(range(10)), random_numbers):
    print(i, '번째로 뽑은 임의의 수:', random_number)

실행 결과

0 번째로 뽑은 임의의 수: 1
1 번째로 뽑은 임의의 수: 17
2 번째로 뽑은 임의의 수: 11
3 번째로 뽑은 임의의 수: 3
4 번째로 뽑은 임의의 수: 4
5 번째로 뽑은 임의의 수: 20
6 번째로 뽑은 임의의 수: 11
7 번째로 뽑은 임의의 수: 4
8 번째로 뽑은 임의의 수: 7
9 번째로 뽑은 임의의 수: 1

해설