기본 콘텐츠로 건너뛰기

파이썬으로 로또 번호를 만들어 볼까?

파이썬으로 로또 번호를 뽑을 수 있는 방법이 여러 가지 있겠지만, 나 같은 초보자가 짤 수 있는 것은 기껏해야 두 가지 정도다.

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에서 N까지의 숫자 목록

위의 글에서 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)]

댓글

이 블로그의 인기 게시물

제임스 카메론 감독과 예수 가족의 무덤, '예수 신화'에 이야기를 더하다

 얼룩소에 2023년 8월 2일에 쓴 글입니다. *  *  * 최근에 『예수의 무덤: 역사를 뒤집을 고고학 최대의 발견』(2007)이란 책을 보게 되었습니다. 『예수의 무덤』의 표지(출처: 교보문고) 원제는 The Jesus Family Tomb: The Discovery, the Investigation, and the Evidence That Could Change History (예수 가족의 무덤: 역사를 바꿀 수 있는 발견, 조사, 그리고 증거, 2007)입니다. 이 책을 보고 '제임스 카메론'이 등장할 것을 알기는 어렵지요. 관련 논란을 미리 알았더라면, 그리 놀라지는 않았을 것 같습니다. 책을 펼치면 '추천의 글'이 있습니다. 이 글을 쓴 사람이 제임스 카메론(캐머런)이었습니다. 『예수의 무덤』 17쪽, '추천의 글' 글쓴이 그런데 이 책의 문제 의식은 상당히 인상적입니다. 역사학자, 성서학자의 '예수의 실존'에 관한 일반론에 대한 반박을 할 수 있는 결정적인 물리적 증거(예수 가족의 무덤)가 심차 자코보비치(Simcha Jacobovici)와 찰스 펠리그리노(Charles R. Pellegrino)에 의해서 발견되었다는 것입니다.  요즘 많은 전문가들이 예수가 실제로 존재하지 않았다고 주장하고는 한다. 이교도들의 신, 죽음과 부활의 신화, 1세기경 유대인들의 메시아 전통 등이 결합되어 조작된 존재로, 예수 역시 그리스 신화의 제우스처럼 역사적 실존 인물이 아니라는 주장이다. ... 그리고 대부분의 학자가 크리스마스도 동지를 축하하는 이교도의 전통을 받아들인 것으로 해석한다. 동정녀 잉태와 부활 등 예수의 이야기에서 기본적인 틀을 이루는 많은 부분이 예수의 존재보다 적게는 수백 년을 앞서고 있기 때문에, 예수가 실존 인물이 아니라 어떤 특별한 이유로 조작된 신화적 인물이라는 주장이 설득력 있게 들린다. 예수 그리스도가 실제로 이 땅에서 살았다는 물리적 증거가 하나도 없기 때문에 ...

태백산, 산당, 서낭당 그리고 사람들┃답사 후기

[2017년 6월에 태백산 일대의 답사를 다녀와서 쓴 글입니다. 답사는 6월 3일부터 6월 4일까지. 후기 작성일 2017. 6. 7.] · · · 태백산에 다녀왔다. 천제단, https://www.khan.co.kr/local/Gangwon/article/202204281434001#c2b 난 답사를 싫어한다. 주위 사람들은 다 알고 있다. '왜 가야 하나'에 적절한 답을 가져본 적이 없다. 학부 때는 '학술'을 가장한 MT같은 것이니 어쩔 수 없다 싶었는데, 대학원에 들어와서는 그마저도 관심이 시들해졌다. '학'은 사라지고 '술'을 위해서 가는 것이라면 또 굳이 갈 이유가 있을까 싶기도 했다. (실제 답사가 다 그런 것은 아니다. 내가 답사에서 무언가 발견할 수 없었기 때문에 그렇게 느꼈던 것 같다) 그런데 박사수료 후부터 조금 달라졌다. 이제 '그곳'에 가면 이야기가 보이기 시작한다. 그것도 재미가 있다. 왜 그런가 싶었는데, 역시 수준 높은 연구자들과 함께 가서 그런 것 같다. 혼자 갔다면 도저히 그곳의 이야기, 그곳 사람들의 이야기를 듣지 못했을 터다. ('자기 문제의식'이 명료화 되었다는 점도 중요한 것 같기는 하다) '산악신앙'은 상식적으로는 '원시신앙'으로 학술적으로는 자연신앙 내지는 마을신앙과 관련된 민속신앙으로 이야기된다. 고도의 신학적 이야기, 그래서 인생의 의미를 음미하는 따위의 것이 담겨있지 않다. 그래서 상당히 빈곤하게 이해된다. 그런데 이번에 태백산 답사를 가서, 거기에 '인간'을 들여다 보는 '어떤 창'이 있다는 것을 새삼스럽게 확인하게 되었다. 산은 '신성한 곳'이다 태백산 같이 높은 산, 주변 지역의 '중심'이 되는 산은 특히 그렇다. 그런 산들은 일단 직접적으로 인간에게 '위험'하다. 맹수로부터 목숨을 위협 받을 수 있는 곳이다. 높...

"명상 수련이 뇌와 면역 체계에 급속한 변화를 일으킨다"(논문 이미지 설명)

 신심미약종교학 채널 에서 다뤘던 " Neural and molecular changes during a mind-body reconceptualization, meditation, and open label placebo healing intervention " 논문 리뷰글에 이어서, 해당 논문의 핵심 메시지를 논문의 그림들에 대한 설명을 중심으로 이곳에 정리한다. 논문 소개 Neurosciencenews.com 기사 "마음과 몸의 재개념화, 명상 및 공개 라벨 위약 치유 중재 과정에서의 신경 및 분자적 변화"(2025)의 연구 실험 설계를 담고 있는 그림1 출처: https://www.nature.com/articles/s42003-025-09088-3 Fig. 1: Study design, participants, data collection, and recruitment에 대한 설명 이 그림은 7일간의 집중 명상 프로그램이 인간의 뇌와 신체에 미치는 영향을 과학적으로 측정한 연구의 전체적인 설계를 보여주고 있다. A. 연구진은 먼저 뇌와 신체의 생물학적 변화를 포착하기 위한 다양한 측정 방법을 준비했다. 뇌의 변화를 관찰하기 위해 MRI를 통한 기능적 연결성과 구조적 변화를 측정하고, 신체의 변화를 파악하기 위해 혈액 샘플에서 신경 성장 인자, 대사 물질, 단백질, 그리고 엑소좀 내 RNA까지 광범위하게 분석하는 체계를 구축했다. B. 연구에는 총 20명이 참여했는데, 이 중 14명이 여성, 6명이 남성이었으며 평균 연령은 46세였다. 참가자들은 명상 경험 수준에 따라 초보자와 숙련자로 구분되었고, 각 참가자의 생체 표지자 수준도 사전에 측정되어 분류되었다. C. 프로그램은 9일에 걸쳐 진행되었다. 실제 개입 프로그램은 Day 1부터 Day 7까지 7일간 진행되었으며, 참가자들은 매일 4-6시간의 명상, 2-4시간의 재개념화 교육(고통과 치유에 대한 인식 전환), 그리고 1시간 내외의 치유 의식에 참여했다. 프로그램...