기본 콘텐츠로 건너뛰기

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

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

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년 1월 28일에 게재했던 글입니다. 본래 제목을 약간 수정하였습니다. 이 글은 Skeptic Korea의 " 정신의학의 오래된 과제, 과학적 치료와 처방 "에 관한 얼룩소글의 출처를 체크하고, 정신질환 치료의 현실에 대해 박한선 선생님께 들었던 이야기를 정래해 본 글입니다. ─── ∞∞∞ ─── 최근에 나온 글인 줄 알고 찾아봤더니 전에 나온 글이군요. 마침 어제(1/27) 정신과 의사 출신 인류학자 박한선 선생님을 통해서 관련 이야기를 듣고, 글쓴이부터 찾아 봤습니다. 다른 저자인 걸 보고, 정신의학계에서 상당히 유명한 이야기라는 걸 짐작할 수 있었습니다. 박선생님께서 정신병 진단과 치료에 '정신분석학'이 사용되고 있다고 하셔서 좀 어리둥절 했었습니다. 심리학계(실험심리가 중심이 된)에서는 배우지 않게 된 분야로 알고 있어서 의학 분야에서도 당연히 퇴출되었다고 지레짐작하고 있었습니다. '왜 인지 모르지만, 효과가 있다'는 면에서 정신과 치료가 이루어지는 현실을 생각해 보는 계기가 되었습니다. 아, '정신분석학'도 프로이트, 융 시절의 버전이 아니라 많이 업데이트가 되었다고 하더군요. 자세한 부분은 과문해서 잘 모르겠습니다만. 어제 박선생님이 들려주신 이야기도 떠올라 흥미롭게 이 스켑틱의 글을 읽다가 문득 출처가 궁금해서 찾아 보니, '한국 스켑틱'에는 14권(2018년)에 "정신의학은 과학이 될 수 있을까"라는 제목의 글로 실려있었습니다. (스켑틱에서 얼룩소에 올리는 글이 최근호에 실린 글이 아니라는 걸 이제사 깨달은 거죠) https://www.badabooks.co.kr/SKEPTIC_magazine/?idx=54 글은 14권의 68~83쪽에 실렸습니다. 이 글을 일부 발췌해서 재편집한 것이 위의 얼룩소에 실린 글이더군요.

ChatGPT에 '크리스마스와 동지'의 관계를 물어 보았다.

요즘 핫하다는 '챗GPT'에 크리스마스와 동지의 관계를 물어보았다. https://openai.com/ 나: 크리스마스가 동지와 관계가 있다고 생각하니? 챗봇: 크리스마스는 세계 여러 지역에서 전통적으로 12월 25일에 기념하는 축제일이며 종종 북반구에서 1년 중 낮이 가장 짧은 동지와 관련이 있다. 동지는 보통 12월 21일 또는 22일 경에 발생하며 태양이 하늘에서 가장 낮은 지점에 도달하는 것, 즉 일 년 중 밤이 가장 긴 날을 표시한다. 크리스마스 축제는 원래 기독교 이전의 동지 축제의 영향을 받았을 것으로 생각되며, 이는 종종 태양의 재생과 낮이 더 길어지는 시기의 복귀와 관련이 있다. 고대 로마인과 고대 켈트족을 포함한 많은 고대 문화에는 동지와 태양의 귀환을 중심으로 한 전통과 축제가 있었다. 그러나 크리스마스는 복잡한 역사를 가지고 있으며 다양한 문화 및 종교적 영향에 의해 형성되었다는 점에 유의하는 것도 중요하다. 동지가 축제일의 기원에 역할을 했을 수도 있지만, 크리스마스는 광범위한 종교적, 문화적 전통과 연관되어 현재 전 세계의 다양한 신앙을 가진 사람들이 기념하고 있다. 크리스마스와 동지의 관계에 대해서 비교적 유의미한 정보를 제공하는 것으로 보인다.  동지 축제와 관련성을 '논증'하지는 않지만, 중요한 정보(동지 축제와 관련되지만 현재는 역사/문화/종교적 설명이 복잡하게 얽혀있다거나 복잡하게 변화했다)는 대체로 잘 이야기하고 있다. 인지진화적 설명은 관련 문서가 부족하기 때문에 활용하지 못하는 것으로 보인다. 디테일이 부족한 것도 한계라 할 수 있겠지만, 간단한 답변으로서는 상당한 수준이라는 것도 부인할 수 없는 것 같다. 챗GPT가 3문단으로 설명하는 것을 나는 A4 몇 페이지로 설명했던가. 대학 등에서 학생들에게 과제나 시험문제를 내줄 때 이제 안일하게 내면 AI가 답을 써주는 시대가 되어버린 듯하다. ─── ∞∞∞

절기, 시간의 마디와 의례 본능

‘크리스마스와 동지 축제’라는 타이틀의 시리즈물의 마지막 글이다. 이전 글까지 확인하려고 했던 것은 ‘크리스마스’가 동지라는 ‘시간의 마디’에 이루어지는 의례였고, 지금도 그 특성이 유지되고 있다는 것이다. 그 다음에 물을 수 있는 것은 '이런 시간의 마디에서 인간은 왜 의례 행동을 하는가'가 될 것이다. 동지 축제의 주요 요소라고 할 만한 것들이 ‘주술-종교적 목적의 행동’이라는 점을 지난 글( 핼러윈, 크리스마스, 만우절의 공통점 )에서 언급했다. 팥죽과 주술-종교적 위험 회피 우리의 동지 축제 때 관습으로 ‘팥죽 먹기’가 있는데, 그것도 동지 축제에서 많이 보는 주술-종교적 행동이다. 동지에 팥죽을 먹는 풍습에 대한 ‘한국민족문화대백과사전’의 설명을 보자. 동짓날에는 동지팥죽 또는 동지두죽(冬至豆粥)·동지시식(冬至時食)이라는 오랜 관습이 있는데, ... 팥죽에는 축귀(逐鬼)하는 기능이 있다고 보았으니, 집안의 여러 곳에 놓는 것은 집안에 있는 악귀를 모조리 쫓아내기 위한 것이고, 사당에 놓는 것은 천신(薦新)의 뜻이 있다. ... 동짓날에 팥죽을 쑤어 사람이 드나드는 대문이나 문 근처의 벽에 뿌리는 것 역시 악귀를 쫓는 축귀 주술행위의 일종이다. ‘악귀를 쫓는 축귀 주술행위’로 팥죽을 쑤어 먹는다는 것이다. 이런 동기는 이 풍습이 관습화되면서 많이 약화되고 새해에 떡국을 먹는 것처럼 ‘한 살을 먹는다’는 의미 정도로 축소되었다. 세계 도처의 ‘동지 축제 풍습’, 또 신년 의례를 보면 시간이 변하는 시점에 귀신이나 악령이 출몰하고 이들로부터 인간이 액, 살과 같은 좋지 않은 영향을 받을 수 있다는 관념이 폭넓게 퍼져 있다는 것을 알 수 있다. 그리고 그것을 막기 위한 모종의 행동(의례)을 수행하는 것을 확인할 수 있다. 참고로 시간의 ‘경계’만큼이나 공간의 ‘경계’에서도 인간의 종교적 상상력은 활발히 작동한다. 그 대표적인 예가 누석단이다. 영어권에서는 cairn이라고 말하는 것이다. 새로운 공간으로 진입할 때 사람들은 민감하게 초자연적