랜덤(random) 모듈은 무작위 수인 난수를 생성해 사용하는 함수들을 모아 놓은 것이다. 통계적 추론에서 표본의 대표성을 확보할 수 있는 최적의 방법은 무작위(random) 표집(sampling)이다. 여기서 무작위로 뽑는다는 것은 난수를 생성해서 뽑고자 하는 요소와 난수를 매칭시켜 선택하는 방법을 사용한다.
우선 난수를 생성하는 함수부터 살펴보자. random 모듈에서 모든 함수를 불러오도록 하자(from random import *). 불러온 함수 중 random() 함수를 사용하면 0부터 1까지 중에서 실수를 무작위로 하나 추출할 수 있다. 0~1이 아닌 특정 범위에서 난수를 뽑고 싶다면, uniform(a, b)을 사용한다. uniform(10, 20) 하면, 10.0에서 20.0 사이의 실수값이 뽑힌다.
정수로 된 난수를 뽑을 수도 있다. randint(a, b)라고 하면, 정수 a와 b 사이의 정수가 랜덤하게 추출된다. 홀수나 짝수 등 특정 값을 랜덤하게 뽑고 싶다면, randrange(start, end, step)를 사용한다. randrange(1, 10, 2)하면, 1부터 10 사이에 2칸씩 즉, 홀수 값을 뽑게 된다. randrange를 사용할 때 유의할 점은 최대치가 미만이라는 것이다. 예를 들어, randrange(10) 하면, 0~9까지 임의의 정수, randrange(1, 10, 2)는 1~9까지 홀수를 뽑으라는 의미이다.
이를 정리하면 다음과 같다.
난수 생성 함수 | 설명 |
random() | 0~1 사이의 랜덤 실수 생성 |
randint(min, max) | 최소~최대 임의 정수 생성 |
uniform(min, max) | 최소~최대 임의 실수 생성 |
randrange(start, end, step) | 시작~끝 중 지정 된 간격 숫자 생성 |
from random import * # random 모듈에 있는 모든 함수 불러오기
random() # 0부터 1 사이 임의의 실수(float) 추출
uniform(10, 20) # 10.0부터 20.0 사이 임의의 실수(float)
randint(1, 100) # 1부터 100 사이 임의의 정수 추출
randrange(1, 101, 2) # 1부터 100 사이 임의의 홀수 중 하나 추출
randrange(10) # 0부터 9 사이 임의의 정수
난수를 생성하는 함수는 주사위를 던져서 나온 임의수, 로또 번호를 임으로 추출, 업(up) & 다운(down) 숫자 맞추기 등 다양한 분야에서 응용될 수 있다. 간단한 예로 1부터 45까지 로또 번호 6개를 랜덤하게 뽑아보자!
정수 구간이 필요하기 때문에 randrange와 randint 사용할 수 있다. randrange의 경우에는 최대치가 포함되지 않지 않기 때문에 최대치를 46으로, randint의 경우에는 최대치를 포함하기 때문에 최대치를 45로 한다.
from random import *
lotto_list = [] # 로또 번호 저장할 리스트
for i in range(0,6): # 6번 반복
n = randint(1, 45) # 1~45 중 랜덤 추출
lotto_list.append(n) # 리스트에 추가
print(lotto_list)
술래인 한 사람이 임의의 숫자 하나를 생각하고 나머지 사람들이 돌아가면서 그 숫자를 맞추는 업(up) & 다운(down) 게임을 해본 경험이 있을 것이다. 추측한 숫자보다 높으면 업(up)이라고, 낮으면 다운(down)이라는 사인을 보내다. 계속 반복하다 보면 어느 순간 해당 숫자로 수렴하게 된다. 술래는 1~100 사이의 숫자를 하나 선택했다고 하자.
from random import *
num = randint(1, 100) # 술래가 생각한 숫자
while True: # 무한 반복
guess = int(input("Guess my number: ")) # 추측한 숫자 입력
if (num == guess): # 생각한 숫자와 추측한 숫자가 맞으면 종료
print("Correct!")
break
elif (num > guess): # 생각한 숫자 > 추측한 숫자면, 더 높은 숫자 요구
print("Choose higher number")
else:
print("Choose lower number") # 생각한 숫자 < 추측한 숫자면, 더 낮은 숫자 요구
seed 값 사용
파이썬 강의 등 다수가 동시에 같은 프로그램을 수행한다면 같은 값이 나오는지 확인하기 위해 동일한 난수 값을 발생시킬 필요가 있다. 이럴 때 seed(숫자)를 설정한다. 모두가 seed(100)이라고 선언하고 난수를 발생시키면 모두 같은 난수 값을 갖게 된다.
from random import *
seed(100) # seed(100)으로 설정된 랜덤 값은 항상 같음.
random()
'파이썬' 카테고리의 다른 글
[ 코랩과 파이썬 ] 1-1. 구글 코랩 Google Colab에 폴더 업로드 및 압축파일 zip 풀기 (0) | 2023.02.06 |
---|---|
[ 코랩과 파이썬 ] 16. python random 모듈에서 sample, choices, choice, shuffle 함수로 데이터 추출하기 (2) | 2023.01.30 |
[ 코랩과 파이썬 ] 14. python 정렬 sorted 함수 (itemgetter 함수 포함) (0) | 2023.01.25 |
[ 코랩과 파이썬 ] 13. python 필터 filter 함수 (isinstance 함수 포함) (0) | 2023.01.25 |
[ 코랩과 파이썬 ] 12. python 람다 lambda 함수와 맵 map 함수 (0) | 2023.01.17 |