파이썬 난수란?
파이썬은 난수(random number)를 생성하기 위한 다양한 함수를 random 모듈을 통해 제공합니다. 이러한 함수들은 게임 개발, 복권 추첨, 데이터 샘플링, 시뮬레이션 등 무작위성이 필요한 거의 모든 분야에서 폭넓게 활용됩니다.
난수 함수를 사용하기 전에는 반드시 random 모듈을 임포트해야 합니다.
import random
주요 난수 생성 함수
choice() – 컬렉션에서 하나 선택
choice() 함수는 리스트와 같은 시퀀스(컬렉션)에 들어 있는 값 중에서 임의의 요소 하나를 골라 반환합니다.
예제
print("리스트에서 뽑은 난수 : ", end="")
print(random.choice([1, 4, 6, 100, 31]))
실행 결과
리스트에서 뽑은 난수 : 100
randrange(beg, end, step) – 범위 내 정수 난수
randrange() 함수는 인자로 지정한 범위 안에서 정수 난수를 생성합니다. 시작 값(begin), 끝 값(end), 증폭(step) 세 개의 인자를 받으며, 끝 값은 결과에 포함되지 않습니다.
예를 들어 randrange(2, 10, 3)은 2부터 시작해 3씩 증가하는 값, 즉 2, 5, 8 중 하나를 반환합니다.
예제
print("범위에서 뽑은 난수 : ", end="")
print(random.randrange(2, 10, 3))
실행 결과
범위에서 뽑은 난수 : 8
random() – 0 이상 1 미만의 실수
random() 함수는 인자 없이 호출하며, 0.0 이상 1.0 미만의 부동소수점 난수를 반환합니다.
예제
print("0과 1 사이의 난수 : ", end="")
print(random.random())
실행 결과
0과 1 사이의 난수 : 0.42487645546
shuffle() – 리스트 무작위 섞기
shuffle() 함수는 리스트의 요소 순서를 제자리(in-place)에서 무작위로 섞어 줍니다. 카드 덱을 섞는 것과 같은 상황에서 특히 유용합니다.
예제
numbers = [1, 3, 5, 10, 4]
print("섞기 전 리스트 : ", end="")
for j in range(len(numbers)):
print(numbers[j], end=" ")
print("\r")
random.shuffle(numbers)
print("섞은 후 리스트 : ", end="")
for j in range(len(numbers)):
print(numbers[j], end=" ")
print("\r")
실행 결과
섞기 전 리스트 : 1 3 5 10 4 섞은 후 리스트 : 3 10 1 4 5
참고로 원본 예제에서는 변수 이름으로 list를 사용했는데, 이는 파이썬 내장 타입과 이름이 겹치므로 위 예제처럼 numbers 같은 다른 이름을 사용하는 것이 좋습니다.
uniform(a, b) – 지정 범위의 실수 난수
uniform() 함수는 두 인자로 주어진 하한(a)과 상한(b) 사이의 부동소수점 난수를 생성합니다.
예제
print("6과 11 사이의 실수 난수 : ", end="")
print(random.uniform(6, 11))
실행 결과
6과 11 사이의 실수 난수 : 7.18036982355346
핵심 함수 요약
| 함수 | 설명 | 반환값 |
|---|---|---|
| choice(seq) | 시퀀스에서 임의의 요소 하나 선택 | 요소 자체 |
| randrange(beg, end, step) | 지정 범위·간격의 정수 난수 생성 | 정수(int) |
| random() | 0.0 이상 1.0 미만의 난수 생성 | 실수(float) |
| shuffle(seq) | 시퀀스를 제자리에서 무작위로 섞음 | None |
| uniform(a, b) | a와 b 사이의 실수 난수 생성 | 실수(float) |
마무리
파이썬의 random 모듈은 이 외에도 정수 난수를 뽑는 randint(), 중복 없이 여러 개를 추출하는 sample(), 난수 시드를 고정하는 seed() 등 유용한 함수를 더 제공합니다. 용도에 맞는 함수를 적절히 조합하면 게임 로직, 복권 추첨, 통계 샘플링, 시뮬레이션 등을 손쉽게 구현할 수 있습니다.