파이썬으로 로또 번호를 뽑을 수 있는 방법이 여러 가지 있겠지만, 나 같은 초보자가 짤 수 있는 것은 기껏해야 두 가지 정도다.
random 라이브러리를 이용해서
1~45까지의 임의의 정수를 추출하는 randrange(1, 46), randint(1, 45)를 써서 숫자를 뽑는 방법이다.
from random import *
print(randrange(1, 46))
print(randrange(1, 46))
print(randrange(1, 46))
print(randrange(1, 46))
print(randrange(1, 46))
print(randrange(1, 46))
이런 식으로 하면 1~45 사이의 6개의 숫자를 무작위로 뽑을 수 있다. 다만 이 경우는 중복을 막을 수 없다. 그렇게 중복이 자주 일어나는 것 같지는 않지만.
역시 random 라이브러리를 이용하지만, 리스트에서 원소를 뽑는 방식을 사용하면 훨씬 그럴 듯하게 '로또 번호'를 파이썬으로 만들어 볼 수 있다.
1~n까지 숫자로 이루어진 리스트를 만드는 방법을 알고,
해당 리스트에서 중복 없이 m개의 원소를 뽑는 함수를 알면 된다.
위의 글에서 1~45까지 숫자 리스트 만드는 법을 참고할 수 있었다.
함수를 정의하는 방식으로 작성되어 있다.
def createList(n):
lst = []
for i in range(n+1):
lst.append(i)
return(lst)
print(createList(10))
0~10까지의 수로 이루어진 리스트를 이렇게 정의했는데, 원하는 것은 1~45이므로
range(1, n+1)로 해주면 1~n까지의 리스트 생성 함수를 정의할 수 있다.
def createList(n):
lst = []
for i in range(1, n+1):
lst.append(i)
return(lst)
이렇게 하고 createList(45)를 해 주면 1~45의 수를 갖는 리스트가 생성된다.
리스트에서 중복없이 원소를 뽑아내는 것은 sample()을 이용하면 된다.
sample(a, b)는 a 리스트에서 b 갯수만큼 중복 없이 원소를 꺼낸다는 의미이다.
createList(45)에 lst란 변수를 할당해서, sample(lst, 6)을 하면 1~45 중에서 6개의 숫자를 중복없이 뽑아준다. 이걸 프린트 해주면 결과를 볼 수 있다.
완성된 코드는 다음과 같다. (print를 5번 반복하지 않고 코드를 줄이는 방법이 있겠지만 아직 파악하지는 못했다)
from random import *
def createlist(n):
lst = []
for i in range(1, n+1):
lst.append(i)
return(lst)
lst = createlist(45)
print(sample(lst, 6))
print(sample(lst, 6))
print(sample(lst, 6))
print(sample(lst, 6))
print(sample(lst, 6))
구글링을 해 보니 훨씬 간단하게 짠 로또 번호 생성기들이 많이 있는 것 같다.
━━━━━━
추가1
아래 print문 5개는 다음과 같이 줄일 수 있다. for문을 배웠지만 자유롭게 쓰지는 못하니 앞에서 적용을 못했었다. 제대로 짠 것인지는 모르지만 결과는 제대로 나오니까...
for i in range(1, 6):
print(sample(lst, 6))
이렇게 하면 print(sample(lst, 6))을 5회 반복할 수 있다. (보통 로또는 5회분을 구매하니까)
추가2
createlist()를 정의하지 않고 간단하게 [1~45] 리스트를 만드는 방법을 알았다.
range(1, 46)을 list() 함수로 처리하면 간단하게 [1, 2, ..., 45] 리스트를 만들 수 있다. 이렇게 하면 4행짜리 코드로 로또 번호를 n개 생성할 수 있다.
정리하면 아래와 같다.
from random import *
lottonumset = list(range(1, 46))
for i in range(1, n+1):
print(sample(lottonumset, 6))
위의 코드에서 변수를 제거하면 1행을 더 줄일 수 있다.
from random import *
for i in range(1, n+1):
print(sample(list(range(1, 46)), 6))
여기에서 for문 1줄 쓰기를 하면 또 1행을 줄일 수 있다.
from random import *
[print(sample(list(range(1, 46)), 6)) for i in range(1, n+1)]
댓글
댓글 쓰기