Python에서 임의의 수(난수), random number를 얻으려고 합니다. 어떻게 하면 될까요? 아래에서 자세히 알아봅니다.



# Python 임의의 수 생성하기, random
파이썬에서 임의의 수를 생성하기 위해 random 모듈을 사용할 수 있습니다.

import random


random 모듈은 임의의 수(난수)를 생성할 수 있는 random() 메소드를 가지고 있습니다. 이를 사용하면 간단하게 랜덤 숫자를 얻을 수 있습니다.

import random
myNum = random.random()
print(myNum)

출력 결과는 아래와 같습니다.
0.16104757064319608

타입을 확인하면 float로 출력됩니다.
<class 'float'>

이제 아래에서 간단한 예제를 만들고 실행해보겠습니다.


! 1부터 특정 범위의 임의의 수 구하기
만약 1부터 10 사이의 임의의 값을 구하려면 어떻게 할까요? 원하는 값을 곱한 후 1을 더하면 1부터 해당 값 사이의 임의의 수를 얻을 수 있습니다. 1부터 e 사이의 랜덤한 값을 얻는다면? 아래의 수식을 사용하면 됩니다.
int(random.random() * e) + 1

이때 정수를 얻기 위해서 int()를 사용하였고 0이 아닌 1부터 값을 구해야 하므로 1의 값을 더하였습니다.

! start 부터 end 까지의 임의의 수 구하기
위 예제에 나아가 s부터 e까지의 임의의 수를 구하는 경우라면 수식을 조금 수정해 아래와 같은 함수를 만들 수 있을 것입니다.
def rangeNum(s, e):
  return int(random.random() * (e - s + 1)) + s

rangeNum() 함수는 인자로 시작 값 s와 마지막 값 e를 받습니다.  결과가 잘 나타나는지 한 번 코드를 실행해보겠습니다.
rangeNum(1, 5)
rangeNum(10, 15)
rangeNum(100, 200)
rangeNum(10, 5)

결과는 아래와 같습니다.
rangeNum(1, 5)
// 3

rangeNum(10, 15)
//  13

rangeNum(100, 200)
// 125

rangeNum(10, 5)
// 11 오류가 발생

맨 마지막의 실행 값만 제외하고는 모두 정상 출력되었습니다. 시작 값과 마지막 값이 반대인 경우는 원하는 값을 얻을 수 없었습니다. 이 경우 숫자의 순서를 바꾸면 해결되겠군요. 아래와 같이 코드를 변경해보았습니다.
def rangeNum(s, e):
  if s > e:
    prevS = s;
    s = e;
    e = prevS;
  
  return int(random.random() * (e - s + 1)) + s

이제 다시 코드를 실행해봅니다.
rangeNum(10, 5)
// 6, 7, 8, 10, 9

5번 수행하였을 때 위와 같은 결과가 나왔습니다. 잘 동작하는 것 같습니다.