일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- office
- pyqt5
- pythongui
- 아웃룩
- python
- Android
- 문자열
- 윈도우10
- html
- 파이썬3
- 오피스
- VBA
- 파이썬
- 엑셀
- 파이썬GUI
- 비주얼베이직
- python3
- pandas
- 깃
- Windows10
- 윈도우11
- windows
- win32com
- 파워포인트
- Outlook
- Windows11
- git
- Excel
- 안드로이드
- matlab
Appia의 IT세상
파이썬[Python] 013 로또(lotto) 번호 생성기 만들기와 random 모듈 본문
거의 대부분의 직장인의 꿈은 로또 1등이거나 한방에 큰 거금이 들어오는 것일 수 있습니다. 저 또한 매주 로또를 구매 하는 편입니다. 오늘은 로또 번호를 생성하는 코드를 작성해보도록 하겠습니다. (물론, 저의 경우 자동으로만 구매합니다.)
필요 항목
- 반복문, 조건문, random 모듈
로또는 총 1~45번 사이의 숫자 중 6개를 추첨하는 형태입니다. 모두가 맞으면 1등이겠죠 ?
그래서 최초에 무작위로 숫자를 생성하는 함수를 이용하여 숫자를 생성하고, 이 부분이 앞서 생성된 수와 반복 여부를 따라서, 항목에 추가하는 형태로 만들어 볼까 합니다. 여기에서는 while문을 사용할까 합니다. 주로 저의 경우, for문을 좋아합니다. 하지만 이럴 경우에는 while문이 훨씬 효율적입니다.
그럼 먼저 간단히 코드 흐름에 대해서 몇 글자로 요약 해보겠습니다.
- 생성 수를 저장할 수 있는 저장소 (리스트) 생성
- 저장소의 멤버 개수가 6인지에 대해서 확인하고 6 미만이면 하기 동작 실행
- 랜덤한 정수 생성( 1~45)
- 생성된 수가 저장소(리스트)에 없으면 저장소(리스트)에 저장
- 생성된 정수가 저장소(리스트)에 있는지 여부 확인
- 다시 2번으로 돌아가서 반복 진행
이런 형태로 코드를 짜보고자 합니다. 일단 사람들 마다 다르지만, 저의 경우는 코드를 작성하기 전에 반드시 위와 같은 형태로 글로 적어 보거나, 아니면 stateflow또는 별도의 틀을 통해서 flowchart(플로우차트)를 작성하기 위해서 노력합니다. 저의 개인적인 의견으로는 보다 효율성 있는 코드를 생성하기 위해서 반드시 선행 되어야 합니다.
random모듈 사용법
위의 코드를 생성하기 위해서 random 모듈에 대해서 알아보도록 하겠습니다.
random에 대한 사용법을 간단히 살펴보면 몇가지가 있습니다.
Random.random()
0.0~1.0사이의 실수(float)를 반환합니다.
random.randint(1,100)
1부터 100까지 수중에 정수를 리턴합니다. 즉 마지막 100까지 포함합니다.
random.randrange(0,10,3)
1부터 10미만 3의 배수를 반환합니다.
random.choice([1,2,3,4,5,6,7])
[1,2,3,4,5,6,7]중에 한 글자를 리턴합니다.
random.sample(range(1,46),6)
1이상 46미만중 6개 값을 리스트 형식으로 반환 받습니다. 즉, sample 함수는 중복 없이 처리해 주기 때문에 로또 번호 생성에 최적화 입니다.
List = [1,2,3,4,5,6,7,8]
Random.shuffle(List)
[1,2,3,4,5,6,7,8]의 숫자들을 가지는 List 섞어서 배열합니다. 별도의 데이터 반환 값이 없습니다.
참고 포스팅
- 제어/ 반복문 관련 포스팅
물론 위의 sample를 이용하면 바로 번호 생성이 가능합니다. 하지만, 조금이나마 다른 방식으로 생각해보고자 제가 위의 명시한대로 코딩을 해보도록 하겠습니다.
import random LottorNumber = [] while len(LottorNumber) < 6 : V = random.randint(1,45) if V not in LottorNumber: LottorNumber.append(V) print(LottorNumber)
물론 다음 위의 sample 명령어를 참조 해서 다음과 같이 코딩을 해도 됩니다.
import random print(random.sample(range(1,46),6))
그럼 다음과 같은 결과를 얻을 수 있습니다.
[44, 2, 37, 20, 39, 5]
금일 포스팅은 로또 번호 생성기를 통하여 반복문과 리스트에 대해서 좀더 응용해서 알고자 했습니다. 여러분들에게 도움이 되셨으면 좋겠습니다. 매운 간단하지만, 이런 부분부터 조금씩 하나씩 꼼꼼히 알아간다면 여기에서 사용된 다양한 부분들에 대해서 공부할 수 있을 것이라고 생각합니다.
저의 경우 위의 두 코드 중에 무조건적으로 후자에 있는 짧은 코드를 선호 하는 편입니다. 하지만, 경우에 따라서는 무조건 짧은 코드가 좋다고만 할 수는 없습니다. 2가지 방법 다 알아 두시면 좋을 것 같습니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬 [Python] 018 win32com 이용 Excel파일 CSV파일로 저장하기 (0) | 2019.12.29 |
---|---|
파이썬 [Python] 017 win32com 이용하여 Excel 제어하기 (2) | 2019.12.29 |
파이썬 [Python] 016 최대 공약수 최소 공배수 구하기, 유클리드 호제법 (0) | 2019.12.29 |
파이썬 [Python] 015 진법 변환 (10진수, 2진수, 8진수, 16진수 변환) (0) | 2019.12.28 |
파이썬[Python] 014 Pywin32 설치 (0) | 2019.12.28 |