[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() 함수를 사용하여 이 초기 상태로 복원하면 이전에 생성한 난수와 동일한 결과를 얻을 수 있다. 이 기능은 난수 생성 결과를 재현하거나 실험 결과를 고정하는 데 유용하다.
'Programming Language > Python' 카테고리의 다른 글
[Python] join 함수를 사용하여 리스트를 문자열로 바꾸기 (0) | 2023.09.23 |
---|---|
[Python] 파이썬 split 함수 (0) | 2023.09.23 |
[Python] 파이썬 os 모듈 사용법 (0) | 2023.09.18 |
[Python] 파이썬 모듈,라이브러리,패키지의 차이 (0) | 2023.09.17 |
[Python] 파이썬 메모리 구조 (0) | 2023.09.14 |
소중한 공감 감사합니다