프로그램의 모델이나 동작을 다양한 값 범위에서 테스트하거나 연구할 때 난수를 생성해야 하는 경우가 자주 발생합니다. Python은 기본 제공되는 random 모듈을 사용하여 손쉽게 난수를 생성할 수 있습니다. 이 글에서는 먼저 단일 난수를 생성하는 방법부터 시작하여, 이를 확장해 난수 목록을 만드는 여러 가지 방법까지 예제와 함께 살펴보겠습니다.
1. 단일 난수 생성하기
random 모듈의 random() 메서드는 0 이상 1 미만의 실수(float)를 반환합니다.
예제
import random n = random.random() print(n)
실행 결과
0.2112200
실행할 때마다 결과 값은 달라지며, 항상 0과 1 사이의 실수가 출력됩니다.
2. 특정 범위 내의 정수 생성하기
정해진 범위 안에서 정수 난수가 필요하다면 randint() 메서드를 사용합니다. 이 메서드는 지정한 두 값(시작값과 끝값)을 모두 포함하는 범위에서 정수를 하나 생성합니다.
예제
import random n = random.randint(0, 22) print(n)
실행 결과
2
위 예제는 0부터 22까지의 정수 중 하나를 무작위로 출력합니다.
3. for 루프를 활용한 난수 목록 생성
randint() 메서드를 for 루프와 함께 사용하면 원하는 개수만큼의 난수로 이루어진 리스트를 만들 수 있습니다. 먼저 빈 리스트를 생성한 뒤, 반복문 안에서 생성된 난수를 하나씩 추가(append)하는 방식입니다.
예제
import random
randomlist = []
for i in range(0, 5):
n = random.randint(1, 30)
randomlist.append(n)
print(randomlist)실행 결과
[10, 5, 21, 1, 17]
위 코드는 1부터 30 사이의 난수 5개를 담은 리스트를 생성합니다. 같은 방식으로 range 값을 조절하면 원하는 개수와 범위의 난수 목록을 자유롭게 만들 수 있습니다.
4. random.sample()로 한 번에 난수 목록 생성
for 루프 없이 더 간결하게 처리하고 싶다면 random 모듈의 sample() 메서드를 활용할 수 있습니다. 이 메서드는 지정한 범위(range)에서 중복 없이 원하는 개수의 난수를 추출하여 리스트로 반환합니다.
예제
import random # 10부터 30 사이에서 중복 없이 5개의 난수 생성 randomlist = random.sample(range(10, 30), 5) print(randomlist)
실행 결과
[16, 19, 13, 18, 15]
sample()은 비복원 추출 방식이므로, 요청한 개수가 범위 내 전체 숫자 개수보다 크면 ValueError가 발생한다는 점에 유의해야 합니다.
마무리: 상황별 난수 생성 방법 정리
- 0~1 사이 실수:
random.random() - 특정 범위의 정수 1개:
random.randint(a, b) - 여러 개의 정수 목록: for 루프 +
randint()또는random.sample() - 중복 허용 시: for 루프 방식, 중복 불허 시:
sample()방식
추가로, 실험 결과를 재현해야 하는 경우라면 random.seed(숫자)를 호출하여 동일한 난수 시퀀스를 고정할 수 있으니 참고하시기 바랍니다.