새소식

반응형
Programming Language/Python

[Python] 파이썬 random 모듈 사용법

  • -
반응형

파이썬 random 모듈


파이썬에서 random 모듈은 파이썬의 표준 라이브러리 중 하나로 외부 함수가 아니므로 따로 설치할 필요 없이 바로 사용할 수 있고 난수(랜덤 숫자)를 생성하는 데 사용되는 모듈이다. 난수는 예측할 수 없는 숫자로, 주로 임의의 값을 생성하거나 프로그램에서 무작위적인 동작을 구현하는 데 활용된다.

 

import random

random 모듈은 위와 같이 import 키워드로 바로 불러올 수 있다.

 

그럼 random 모듈의 대표적인 함수 목록을 먼저 살펴본 다음에 각 함수에 대한 사용법을 차례대로 알아보자.

함수명 내용
random() 0 이상 1 미만의 부동 소수점 난수를 생성한다.
uniform(a,b) a 이상 b 미만의 부동 소수점 난수를 생성한다.
randint(a,b) a 이상 b 이하의 정수 난수를 생성한다.
randrange(start,stop,step) start 이상, stop 미만의 범위에서 step 간격으로 정수 난수 생성한다.
choice(seq) 시퀸스(seq)에서 임의의 요소를 선택한다.
shuffle(seq) 시퀸스(seq)를 무작위로 섞는다.
sample(population,k) population에서 중복되지 않는 k개의 요소를 임의로 선택한다.
seed(a = None, version = 2) 난수 생성기의 시드(seed)를 설정한다.
getstate() 현재 난수 생성기 상태를 저장한다.
setstate(state) 이전에 지정한 난수 생성기 상태를 복원한다.

 

 

1. random()


random() 함수는 파이썬의 random 모듈에서 제공하는 함수 중 하나로, 0 이상 1 미만의 부동 소수점 수를 생성하는 데 사용된다. 이 함수는 균일한 확률 분포를 가진 난수를 반환하며, 일반적으로 무작위로 생성된 실수 값을 얻을 때 사용된다.

 

random() 함수는 별다른 인자를 받지 않으며, 호출할 때마다 0 이상 1 미만의 부동 소수점 수를 반환하다.

 

예시 코드

import random

# 0 이상 1 미만의 부동 소수점 난수 생성
random_num = random.random()

print(random_num)  # 출력: 0.7570864258579642 (임의의 부동 소수점 값)

위의 예시 코드에서 random.random()을 호출하면 매번 다른 부동 소수점 난수가 생성된다. 이 함수를 활용하여 무작위로 값을 생성하거나 시뮬레이션할 때 유용하게 사용할 수 있다.

 

 

2. uniform(a, b)


random.uniform(a, b) 함수는 파이썬의 random 모듈에서 제공하는 함수 중 하나로, 지정한 범위 내에서 균일하게 분포하는 부동 소수점 수를 생성하는 데 사용된다. 이 함수를 사용하면 a 이상 b 미만의 부동 소수점 수를 얻을 수 있다.

 

random.unform(a, b) 함수는 두 개의 인자를 받는다. a는 범위의 하한(lower bound)이고, b는 범위의 상한(upper bound)이다. 이 함수를 호출하면 a 이상 b 미만의 부동 소수점 난수를 반환한다.

 

예시 코드

import random

# 1 이상 10 미만의 부동 소수점 난수 생성
random_num = random.uniform(1, 10)

print(random_num)  # 출력: 9.615015202618743 (임의의 부동 소수점 값)

위의 코드처럼 random.uniform(1,10)을 호출하면 1 이상 10 미만의 부동 소수점 난수가 생성된다. 이 함수를 사용하면 원하는 범위 내에서 임의의 실수 값을 생성할 수 있다.

 

 

3. randint(a, b)


random.randint(a, b) 함수는 지정한 범위 내에서 균일하게 분포하는 정수 난수를 생성하는 데 사용된다. 이 함수를 사용하면 a 이상 b 이하의 정수 난수를 얻을 수 있다.

 

random.randint(a, b) 함수는 두 개의 인자를 받는데, a는 범위의 하한(lower bound)이고, b는 범위의 상한(upper bound)이다. 이 함수를 호출하면 a 이상 b 이하의 정수 난수를 반환한다.

 

예시 코드

import random

# 1 이상 10 이하의 정수 난수 생성
random_num = random.randint(1, 10)

print(random_num)  # 출력: 2 (1 이상 10 이하의 정수)

위의 예시 코드에서 random.randint(1,10)을 호출하면 1 이상 10 이하의 정수 난수가 생성된다. 이 함수를 사용하면 원하는 범위 내에서 임의의 정수 값을 생성할 수 있다.

 

 

4. randrange(start, stop, step)


random.randrange(start, stop, step) 함수는 파이썬의 random 모듈에서 제공하는 함수 중 하나로, 정수 난수를 생성할 때 사용된다. 이 함수는 start 이상 stop 미만의 범위에서 step 간격으로 정수를 선택한다.

 

• start

범위의 시작 값으로, 이 값은 범위에 포함된다.

 

• stop 

범위의 끝 값으로, 이 값은 범위에 포함되지 않는다.

 

• step(선택 사항)

간격을 나타내며, 기본값은 1이다. 이 값을 지정하면 정수 사이의 일정한 간격으로 난수를 선택할 수 있다.

 

import random

# 0 이상 10 미만의 정수 범위에서 2의 간격으로 난수 선택
random_num = random.randrange(0, 10, 2)

print(random_num)  # 출력: 6 (0 이상 10 미만의 정수 중 2의 간격으로 선택)

위의 예시 코드에서 random.randrange(0,10,2)을 호출하면 0 이상 10 미만의 정수 중 2의 간격으로 정수 난수가 선택된다. 이 함수를 사용하면 특정 범위에서 정수를 무작위로 선택하고 간격을 조절할 수 있다.

 

그럼 여기까지 읽으신 분들이라면 randint와 randrage의 차이점이 궁금하실 분들이 있을 거라 생각된다. 다음은 두 함수의 특징과 차이점이다.

 

• randint(a, b)

간단하게 두 정수 사이에서 임의의 정수를 얻을 때 사용한다. 간격을 고려하지 않고 범위 내에서 무작위로 선택한다.

 

• randrange(start, stop, step)

범위 내의 임의의 정수를 생성할 때 더 유연하게 사용할 수 있으며, 특정 간격으로 정수를 선택하려면 이 함수를 활용한다.

 

 

5. choice(seq)


random.choice(seq) 함수는 주어진 시퀀스(seq)에서 임의의 요소를 선택하는 데 사용된다. 이 함수를 사용하면 시퀀스(리스트, 튜플, 문자열 등)에서 무작위로 하나의 요소를 선택할 수 있다.

 

random.choice(seq) 함수는 하나의 인자를 받는다. 이 인자로는 시퀀스(seq)가 들어가며, 이 시퀀스에서 임의의 요소가 선택된다.

 

예시 코드

import random

seq = [1, 2, 3, 4, 5]

# 리스트에서 임의의 요소 선택
random_element = random.choice(seq)

print(random_element)  # 출력: 1 (seq 중 임의의 요소)

위의 예시 코드에서 random.choice(seq)를 호출하면 seq 리스트에서 임의의 요소가 선택되어 반환된다. 이 함수는 무작위로 선택된 요소를 얻을 때 유용하며, 프로그램에서 랜덤 한 동작을 구현하는 데 활용될 수 있다.

 

 

6. shuffle(seq)


random.shuffle(seq) 함수는 시퀀스(리스트, 튜플 등)의 요소를 무작위로 섞는 데 사용된다. 이 함수를 사용하면 시퀀스 내의 요소 순서를 무작위로 변경할 수 있다.

 

random.shuffle(seq) 함수는 하나의 인자를 받는다. 이 인자로는 섞고자 하는 시퀀스(seq)가 들어가며, 이 함수를 호출하면 시퀀스 내의 요소 순서가 무작위로 섞인다. shuffle 함수는 원본 시퀀스를 직접 변경하며, 반환값은 None이다.

 

예시 코드

import random

seq = [1, 2, 3, 4, 5]

# 리스트의 요소를 무작위로 섞음
random.shuffle(seq)

print(seq)  # 출력: [3, 2, 4, 5, 1] (my_list의 요소 순서가 무작위로 섞임)

위의 예시 코드에서 random.shuffle(seq)를 호출하면 리스트의 요소 순서가 무작위로 섞인다. 이 함수를 사용하면 리스트의 요소를 무작위로 배치하거나 순서를 변경할 때 유용하다.

 

 

7. sample(population, k)


random.sample(population, k) 함수는 주어진 모집단(population)에서 중복되지 않는 k개의 요소를 임의로 선택하는 데 사용된다. 이 함수를 사용하면 중복 없이 무작위로 요소를 선택할 수 있다.

 

random.sample(population, k) 함수는 두 개의 인자를 받는다. 첫 번째 인자인 population은 요소를 선택할 모집단(시퀀스)이며, 두 번째 인자인 k는 선택할 요소의 개수를 나타낸다. 이 함수를 호출하면 중복되지 않는 k개의 요소로 이루어진 리스타가 반환된다.

 

예시 코드

import random

population = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 리스트에서 중복 없이 3개의 요소 선택
random_sample = random.sample(population, 3)

print(random_sample)  # 출력: [9, 2, 6] (population에서 중복 없이 임의의 3개 요소)

위의 예시 코드에서 random.sample(population, 3)를 호출하면 population에서 중복 없이 3개의 요소가 임의로 선택되어 반환된다. 이 함수를 사용하면 모집단에서 중복 없이 요소를 무작위로 추출할 때 유용하다.

 

 

8. seed(a = None, version = 2)


random.seed(a = None, version = 2) 함수는 난수 생성기의 초기 상태를 설정하는 데 사용된다. 이 함수를 호출하여 동일한 시드(seed)를 사용하면 난수 생성기가 동일한 순서의 난수를 생성하도록 만들 수 있다. 이는 난수를 재현 가능하게 만들 때 유용하다.

 

• a(선택 사항) 

시드 값으로 사용할 정수이다. 만약 a를 지정하지 않으면 현재 시스템 시간을 기반으로 시드가 설정된다.

 

• version(선택 사항)

시드 알고리즘의 버전을 나타내는 정수 값이다. 기본값은 2이며, 이 값을 변경할 필요가 없다. 

 

예시 코드

import random

# 동일한 시드를 사용하여 난수 생성기 초기화
random.seed(123)

# 두 번째 난수 생성
random_num_1 = random.random()
random_num_2 = random.random()

print(random_num_1)  # 출력: 0.052363598850944326
print(random_num_2)  # 출력: 0.08718667752263232

# 동일한 시드를 다시 사용하여 난수 생성기 초기화
random.seed(123)

# 두 번째 난수 생성 (이전과 동일한 결과를 얻을 것입니다)
random_num_3 = random.random()
random_num_4 = random.random()

print(random_num_3)  # 출력: 0.052363598850944326
print(random_num_4)  # 출력: 0.08718667752263232

위의 예시 코드에서 random.seed(29)를 호출하여 시드를 설정한 후, 동일한 시드를 사용하여 난수 생성기를 초기화한 결과, 같은 순서의 난수를 얻을 수 있다. 이는 난수 생성 결과를 재현하거나 테스트 시나리오에서 무작위성을 제어하는 데 사용된다.

 

 

9. getstate(), setstate(state)


random 모듈의 getstate()와 setstate() 함수는 난수 생성기의 상태를 저장하고 복원하는 데 사용된다. 이를 통해 동일한 시드(seed)와 초기 상태로부터 동일한 난수 시퀀스를 재현할 수 있다.

 

getstate() 함수

• random.getstate() 함수는 현재 난수 생성기의 상태를 반환한다.

• 반환된 상태 정보는 튜플로 구성되며, 난수 생성기의 내부 상태와 시드(seed) 정보를 포함한다.

 

setstate(state) 함수

• random.setstate(state) 함수는 이전에 저장한 상태 정보를 받아와서 난수 생성기의 상태를 복원한다.

• 이전에 저장한 상태 정보를 인자로 넘겨주면 해당 상태에서 다시 난수를 생성할 수 있다.

 

예시 코드

import random

# 초기 상태 저장
initial_state = random.getstate()

# 두 번째 난수 생성
random_num_1 = random.random()
random_num_2 = random.random()

print(random_num_1)  # 임의의 부동 소수점 값
print(random_num_2)  # 임의의 부동 소수점 값

# 초기 상태 복원
random.setstate(initial_state)

# 초기 상태로부터 동일한 결과 얻기
random_num_3 = random.random()
random_num_4 = random.random()

print(random_num_3)  # 위에서 생성한 random_num_1과 동일한 값
print(random_num_4)  # 위에서 생성한 random_num_2와 동일한 값

위의 예시 코드에서 random.getstate() 함수를 사용하여 초기 상태를 저장하고, 나중에 random.setstate() 함수를 사용하여 이 초기 상태로 복원하면 이전에 생성한 난수와 동일한 결과를 얻을 수 있다. 이 기능은 난수 생성 결과를 재현하거나 실험 결과를 고정하는 데 유용하다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.