본문 바로가기
개발&코딩/Python

[Python] numpy, random 라이브러리로 로또 번호 생성기 만들기

by 우동이 2020. 9. 16.
300x250

random(난수 생성 라이브러리)

 

random은 난수 생성 모듈로 내장 라이브러리 중 하나이다

random의 random()은 0이상 1 미만의 수중 랜덤한 값을 return한다.

 

ex) random()

>>> random.random()
0.38001436104737807

0이상 1 미만이기 때문에 그 사이의 실수값이 return 되었다.

그러면 로또 번호를 얻기 위해서는 지정된 범위내에서 값을 반환하도록 사용해야 하는데

그 기능을 하는 함수는 따로있다.

ex) randrange()

>>> random.randrange(0,46)
18

randrange()는 말 그대로 ()내에 범위를 지정해준 후 그 범위내의 값을 반환한다.

range()는 범위를 설정하는 함수고 range()에 rand(난수)를 붙여 

범위지정 난수생성 함수기능을 하는 것이다.

 

ex) randint()

>>> random.randint(1, 46)
17

randint()는 정수형의 난수를 반환해준다 randrange()와 동일하게 범위 지정역시 가능하며

우리는 로또번호 즉 정수형 값을 받아야 하기 때문에 randint()를 사용한다

 

module random 사용 제작한 로또번호 생성기

import random


count = int(input("로또 번호를 몇개 생성할까요?> "))

for i in range(count):
    lotto_num = [] # 로또 번호가 담길 리스트형 변수

    for j in range(6): # 6번 반복
        rand_num = random.randint(1, 46) # 난수생성
        lotto_num.append(rand_num) # 난수를 변수에 담음

    lotto_num.sort() # 값 정렬
    print("{}. 로또번호: {}".format(i+1, lotto_num))
    
>>> 로또 번호를 몇개 생성할까요?> 4
1. 로또번호: [4, 14, 21, 28, 31, 33]
2. 로또번호: [11, 21, 35, 35, 35, 45]
3. 로또번호: [2, 6, 8, 10, 23, 40]
4. 로또번호: [12, 14, 20, 26, 30, 43]

그럼 randint()를 이용해 아주 간단한 로또 번호 생성기를 만들어봤다.

lotto_num은 난수로 생성된 로또 번호가 담길 공백 리스트로 선언되었고

 

rand_num은 randint()로 랜덤 생성된 로또 번호가 담길 예정이다

count는 로또 번호가 생성될 개수를 지정하는 Iterator(반복전)이다.

 

이렇게 로또번호를 출력하는 코드가 짜였지만 사실 이 정도의 기능은 너무 단순하고 가볍다.

로또 번호를 만드는 생성기에는 많이 모자란 듯 하다.

 

module numpy + 로또번호 생성기(update version)

import numpy
def make_lotto(count):
    for i in range(count):
    lotto_num = [] # 로또 번호가 담길 리스트형 변수

    for j in range(6): # 6번 반복
        lotto_num = numpy.random.choice(range(1,46),6,replace=False)
        
    lotto_num.sort() # 값 정렬
    print("{}. 로또번호: {}".format(i+1, lotto_num))


count = int(input("로또 번호를 몇개 생성할까요?> "))
make_lotto(count)


>>> 로또 번호를 몇개 생성할까요?> 5
1. 로또번호: [15 16 18 24 33 41]
2. 로또번호: [ 7 12 15 17 24 39]
3. 로또번호: [28 35 38 43 44 45]
4. 로또번호: [ 4 11 20 27 40 43]
5. 로또번호: [ 5  9 10 14 21 44]

모듈 numpy는 다차원배열을 쉽게 처리할 수 있도록 효율적인 기능을 제공하는 외부 라이브러리 패키지인데

데이터구조, 수치계산 등 여러 분야에 있어 Python에 사용되는 경우가 많다.

 

그리고 Numpy에는 module random과 비슷한 기능을 하는 난수 생성 기능도 존재하는데

바로 numpy의 sub package인 random()이다 

 

random.choice의 원형은 numpy.random.choice(array or range, size=(num), replace=T or F, p=%)

이러한데 좀 더 이해하기 쉽도록 원형에 살짝 설명을 첨가했다

먼저 첫번째 인자는 생성할 데이터인데 array형 기본으로 생성된다 ex)array([1,2,3,4,5])

size는 생성될 난수의 개수이며

replace는 True일 경우 중복선택 가능 False일 경우는 중복 선택 불가능이다

p는 배열으로 각 인자의 선택 확률을 지정해줄 수 있다.

 

이제 위 코드에 대해서 설명하자면 range()로 1부터 46까지의 범위를 지정해줬고

값의 중복선택은 불가능 또한 6개의 배열 인자를 갖는다.

그대로 로또 번호의 값을 담을 lotto_num에 담았고 

sort()를 통해 값을 정렬해준 후 출력했다.

그리고 이 모든 기능은 make_lotto()라는 함수를 만들어 그 함수에 삽입했다.

 

ex) 외부 라이브러리 설치법

pip install numpy
(pip가 작동하지 않는다면)
python -m pip install upgrade pip

 

300x250

댓글