Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 난수 생성 완벽 가이드 – choice, randrange, random, shuffle, uniform 총정리

파이썬 난수란?

파이썬은 난수(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() 등 유용한 함수를 더 제공합니다. 용도에 맞는 함수를 적절히 조합하면 게임 로직, 복권 추첨, 통계 샘플링, 시뮬레이션 등을 손쉽게 구현할 수 있습니다.