Python random

LshDevLog·2026년 4월 5일

python

목록 보기
8/16
post-thumbnail
  • random은 난수를 생성하는 파이썬의 표준 라이브러리
    • 의사 난수(pseudo-random) 생성기
    • 완전한 랜덤이 아닌 시드(seed)기반
    • 동일한 seed -> 동일한 결과
    • 시드 기반으로 예측이 가능하기 때문에 보안 관련에는 사용X

실수 난수

import random

print(random.random())
  • random: 0.0 ≤ x < 1.0

import random

print(random.uniform(a, b))
  • uniform: a ≤ x ≤ b

정수 난수

import random

print(random.randint(a, b))
  • randint: a ≤ x ≤ b

import random

print(random.randrange(start, stop, step))
  • randrange: start ≤ x < stop

import random

print(random.randrange(0, 5, 2))
  • range()와 동일한 방식으로 동작
  • 나올 수 있는 수: 0, 2, 4

시퀀스

import random

random.choice(['sword', 'axe', 'spear'])
  • choice
    • 인자값으로 넣은 리스트 중 하나 뽑아서 리턴

import random

item = random.choices(['sword', 'axe', 'spear'], k=2)
print(item)
  • choices
    • 리스트 중 k개 뽑아서 리스트로 리턴
    • k값을 안넣으면 기본은 1개 뽑기
    • 1개만 뽑아도 리스트로 리턴
    • 중복으로 뽑기 허용

import random

grade = ['normal', 'rare', 'unique']
item = random.choices(grade, weights=[65,25,10], k=1)
print(item)
  • choices의 파라미터중 weights로 각 리스트 요소들에 대한 가중치를 설정할 수 있음
  • 리스트의 요소 갯수와 weights의 요소 갯수이 불일치할 경우 ValueError 발생

import random

nums = random.sample([1,2,3], 3)
print(nums)
[2, 3, 1]
  • sample
    • 여러 개 뽑기
    • k값 넣어줘야함
    • 리스트를 리턴함
    • 중복 X
    • 리스트 요소보다 뽑는 횟수가 많으면 중복을 허용하지 않기 때문에 ValueError

import random

nums = [1,2,3,4,5]
random.shuffle(nums)
print(nums)
  • shuffle
    • 원본을 섞음
    • 리턴값은 None

시드

import random

random.seed(42)
print(random.randint(1, 10))
  • 시드는 난수생성기의 시작 상태
  • 시드가 같으면 같은 결과값이 나옴
  • random은 진짜 랜덤이 아니고 seed + 알고리즘으로 숫자를 만들어내는 것
  • 시드는 시간, 요청 순서, 패턴 등으로 추측 가능
  • 토큰, 인증과 같은 보안에는 random이 아닌 secrets 모듈 사용

고급 분포 함수

정규 분포

import random

random.gauss(mu, sigma)
  • 정규분포 기반 난수를 만들어줌(평균 주변에 값이 몰리는 랜덤 값)
  • 현실적이고 자연스러운 값 변화
  • mu: 평균(mean)
  • sigma: 표준편차
  • 정규분포
    • 가운데(평균)에 값이 가장 많음
    • 멀어질수록 확률 급감
  • 사용
    • 데미지
    • AI
    • 노이즈

지수 분포

import random

print(random.expovariate(lambd))
  • 지수 분포 기반 난수를 만들어줌
  • 지수분포
    • 같은 확률로 계속 시도하지만, 오래 기다리려면 계속 실패해야 해서 앞쪽에 값이 몰린다
      • 값이 작을수록 많이 나옴
      • 값이 커질수록 확률 급격히 감소
    • Memoryless
      • 지금까지 기다린 시간은 의미 없음
      • 10초 기다렸어도 다음 1초안에 올 확률은 항상 동일
    • 대기 시간(waiting time) 모델
    • 항상 양수
    • 균등 분포 아님(랜덤인데 한쪽으로 치우침)
  • 사용
    • 서버(API 요청 간격)
    • 네트워크(패킷 도착 시간 모델링)
    • 시뮬레이션

0개의 댓글