A. Programming/Python

[파이썬 코딩 #1] 랜덤 숫자 생성 - 로또(Lotto) 번호 생성 프로그램 - 1

_DK_ 2021. 12. 24. 12:00
반응형
천리길도 한 걸음부터
- 한국 속담

 

  앞선 글들을 통해서 파이썬 코딩을 하기 위해서 알아두면 좋을 기초 지식에 대해서 적어보았습니다.

[A. Programming/Python] - [파이썬 기초] 자료형과 변수

 

[파이썬 기초] 자료형과 변수

언젠가 날기를 배우려는 사람은 우선 서고, 걷고, 달리고, 오르고, 춤추는 것을 배워야 한다. - 니체 이전 글들을 통해 파이썬 코딩을 시작하기 전 알아두면 좋다고 생각되는 PEP8, PyLint, Docstring,

yongbba.tistory.com

[A. Programming/Python] - [파이썬 기초] 인덱싱(Indexing), 슬라이싱(Slicing), 불변(immutable), 가변(mutable)

 

[파이썬 기초] 인덱싱(Indexing), 슬라이싱(Slicing), 불변(immutable), 가변(mutable)

배우지 않으면 곧 늙고 쇠해진다. - 주자  인덱싱(Indexing), 슬라이싱(Slicing), 불변(immutable), 가변(mutable) 이전 글에서는 파이썬에서 사용되는 자료형에는 어떤 것들이 있는지에 대해서 알아보았습

yongbba.tistory.com

[A. Programming/Python] - [파이썬 기초] dir(), help() 내장 함수(빌트인 함수) 사용법

 

[파이썬 기초] dir(), help() 내장 함수(빌트인 함수) 사용법

오늘 나무 그늘에서 쉴 수 있는 이유는 예전에 나무를 심었기 때문이다. - 워렌 버핏 이전 글들을 통해서 파이썬 자료형과 특징들에 대해 알아보았습니다. [A. Programming/Python] - [파이썬 기초] 자료

yongbba.tistory.com

[A. Programming/Python] - [파이썬 기초] 언더바, 언더스코어(_, __) 사용법

 

[파이썬 기초] 언더바, 언더스코어(_, __) 사용법

인내는 쓰나, 그 열매는 달다. - 장 자크 루소 이전 글에서 파이썬 내장 함수 중 처음에 유용하게 사용할 수 있는 dir() 함수와 help() 함수에 대해 알아보았습니다. [A. Programming/Python] - [파이썬 기초]

yongbba.tistory.com

 

  이번 글부터는 파이썬을 이용하여 프로그래밍을 진행해보려고 합니다. 아직 제어문이나 반복문에 대해서 이야기하지 않았기 때문에 코딩을 처음 하시는 분들이라면 어려울 수 있다고 생각합니다. 하지만 기존의 방식대로 순선대로 문법을 배우고 하기보단 프로그래밍을 하나씩 하면서 그때마다 기술을 해보려고 합니다.(코딩을 할 때 많이 사용되는 제어문, 반복문 등에 대한 문법조차도 설명을 따로 하지 않은 상태로 하는 것이 맞는지는 모르겠습니다...)

 

  어떤 프로그램을 만들어 보는 것이 좋을까 고민하다가 간단하면서도 여러 가지를 이야기 해볼 수 있을 것 같다는 생각에 로또(Lotto) 번호를 생성해주는 프로그램을 만들어보려고 합니다. 이번 글부터 하나씩 기능을 추가해가며 진행을 해보려고 합니다.

 

 

 로또 번호 생성 프로그램 만들기 - 1

 

  로또는 1~45까지의 숫자 중 6개의 숫자를 고른 후 그 숫자와 당첨번호를 비교하여 순위가 매겨지는 복권의 한 종류입니다. 관련된 자세한 설명은 아래의 공식 사이트에서 확인을 해볼 수 있습니다.

- https://www.dhlottery.co.kr/gameInfo.do?method=gameMethod

 

로또 6/45소개 < 로또 6/45 < 복권정보 | 동행복권

로또 6/45의 특징 로또는 온라인복권입니다. 온라인복권이란 복권 발행시스템을 갖춘 중앙전산센터와 정보통신망으로 연결된 단말기를 통해 복권의 발행 및 판매가 이루어지는 복권으로 인터넷

www.dhlottery.co.kr

 

  로또 번호를 생성하는 프로그램이란 1~45까지의 숫자 중 겹치지 않도록 6개의 숫자를 선택하는 것이라고 볼 수 있습니다. 이 글에서는 가장 기본인 겹치지 않도록 6개의 숫자를 임의로 뽑는 것까지 코딩을 해보려고 합니다.(다음 글들에서는 하나씩 기능을 추가해보려고 합니다.)

 

 

 랜덤 숫자 생성

 

  가장 먼저 여섯 개의 랜덤 숫자를 생성하는 것에 대해 알아보겠습니다. 파이썬에서는 랜덤 숫자를 생성하는 방법은 다양하게 존재하는데, 그중 'random' 모듈을 이용하여 해보도록 하겠습니다. 'random' 모듈을 경우 파이썬 표준 라이브러리로 아래의 사이트에서 정보를 확인할 수 있습니다.(앞서 알아본 dir()나 help()를 이용하여 정보를 확인해볼 수도 있습니다.)

- https://docs.python.org/ko/3/library/random.html

 

random — 의사 난수 생성 — Python 3.9.7 문서

random — 의사 난수 생성 소스 코드: Lib/random.py 이 모듈은 다양한 분포에 대한 의사 난수 생성기를 구현합니다. 정수에 대해서는, 범위에서 균일한 선택이 있습니다. 시퀀스에 대해서는, 무작위

docs.python.org

 

  random 모듈에서 제공하는 함수들 중 먼저 random() 함수를 이용하여 1~45 중 정수를 출력하도록 해보겠습니다.(위의 파이썬 표준 라이브러리 사이트나 help()를 이용하여 제공하는 함수들에 대해 확인 가능합니다.)

 

import random

print(random.random())				# 0.0 <= x < 1.0
print(random.random()*45)			# 0.0 <= x < 45.0
print(((random.random()*45)+1))		# 0.0 <= x < 46.0
print(int((random.random()*45)+1))	# 0 <= x < 46

 

 

  random() 함수의 경우, 0.0 이상 1.0 미만의 실수 중 하나의 숫자를 생성하여 줍니다. 이를 이용하여 1 이상 46 미만의 정수를 만들기 위해서는 int((random.random()*45)+1)와 같이 변경이 필요합니다. random 모듈에서는 이 외에도 다양한 함수들을 제공하고 있으며 이를 이용하면 더 효율적으로 작성이 가능합니다.

 

import random

print(random.randint(1, 45))		# 1 <= x <= 45

 

 

  위와 같이 randint() 함수를 이용하면 1 이상 45 이하의 정수 중 하나를 간단하게 만들어 볼 수 있습니다. 이 외에도 아래와 같은 방식으로도 가능합니다.

 

import random

print(random.choice(range(1, 46)))		# 1 <= x < 46

 

 

  위의 3가지 예제에서 보았듯 1~45 사이의 정수를 하나 생성하는 방법은 매우 다양하게 존재할 수 있습니다. 이 중 어떤 것을 선택하든 상관은 없지만 프로그램의 기능이 많아질수록 코드들은 더욱 복잡해질 수 있기 때문에 여러 모듈 등에서 제공하는 함수들을 잘 이용하는 것이 중요합니다.

 

  이제 하나의 숫자를 생성하는 것을 해보았으니, 6개의 숫자를 생성하는 것을 해보도록 하겠습니다. 가장 먼저 가능한 방법은 위에서 생성한 하나의 숫자를 생성하는 과정을 6번 반복하는 것입니다. 이를 위해 아래의 예제에서 for A in B: 형식의 제어문을 사용하려고 합니다.(A는 변수, B는 튜플, 리스트, 문자열 등이 올 수 있습니다.)

 

import random

for i in range(6):		# i = 0, 1, 2, 3, 4, 5
	print(random.randint(1, 45))

 

 

  6번 반복해서 random.randint(1, 45)를 출력하도록 하였는데, 이렇게 할 경우에는 위와 같이 중복되는 숫자가 나올 수도 있습니다. 이를 해결하기 위해 코드를 추가하여 이전 숫자와 현재 생성된 숫자가 같은지 확인하는 코드를 추가하여 해결할 수도 있을 것입니다. 하지만 코드가 점점 복잡해질 것이기 때문에 random 모듈에서 지원하는 함수를 이용하여 작성해보도록 하겠습니다.

 

import random

print(random.sample(range(1, 46), 6))

 

 

  위의 예제와 같이 sample() 함수를 이용하여 작성하여 실행하면 1~45까지의 정수 중 6개가 리스트 형식으로 출력되는 것을 확인할 수 있습니다. sample()의 경우 범위 내에서 중복되지 않도록 추출하는 기능을 제공하고 있으며, 이를 이용하여 1 이상 46 미만의 정수에서 6개를 뽑아내도록 작성해보았습니다.

 

import random

lottoNum = random.sample(range(1, 46), 6)
lottoNum.sort()
print(lottoNum)

 

  정렬을 위하여 리스트 타입에서 제공하는 sort() 함수를 이용하여 오름차순으로 정렬하는 부분을 추가하였으며, 다음 글들에서 이어서 진행을 하기 위해 Lotto.py라는 이름으로 작성한 코드를 저장한 후 실행을 해보았습니다.

 

 

  이와 같이 로또 번호 6개를 랜덤으로 생성하는 간단한 프로그램이 완성되었습니다. 이번 글에서 가장 이야기 하고 싶었던 것은 원하는 결과를 얻기 위해서 코딩을 하는 방법은 매우 다양하는 것과 파이썬에서 제공되는 여러 모듈들을 잘 활용하면 효율적인 코딩을 할 수 있다는 점입니다.

 

  다음 글부터는 이 프로그램의 기능들을 조금씩 추가하면서 파이썬 프로그래밍 방법에 대해서 조금씩 더 알아보려고 합니다.

 

 

 

반응형