반응형
아마 파이썬으로 접하기 가장 쉬운 프로그램 중 하나는 바로 로또 번호 생성기일 것이다.
로또 번호를 생성하는 원리와 이를 코드로 구현하는 방법을 차근차근 알아보자.
혹시라도 완성된 코드만 궁금하시다면 맨 밑으로 스크롤 하여 '완성된 코드'를 참고해주세요
로또 번호 생성 원리
조건
1. 6개의 로또 번호는 1부터 45개의 숫자중 하나로 이뤄진다.
2. 중복 입력은 안된다.
(선택) 3. 로또번호는 오름차순이다.
-> 이를 코드로 구현해보자
random 함수 - 아무거나 골라줘
- 조건 1번은 1-45 중 아무거나 하나를 고르는 것이다.
- 파이썬에는 아무거나 하나 골라주는 random 함수가 있다.
>>> import random
>>> random.random()
0.9846643134791911
# 1부터 46 미만의 숫자 중 아무 숫자나 하나 가져오기
>>> random.randrange(1,46)
39
>>> random.randrange(1,46)
15
>>> random.randrange(1,46)
5
>>>
>>> random.randrange(1,46)
41
>>> random.randrange(1,46)
9
생각보다 1번 조건에 대한 문제는 쉽게 해결되었다
하지만 아래와 같은 문제가 남았다.
- 총 6개의 완성된 숫자를 어디에 담을 것인지?
- 중복은 안되게 하려면 어떻게 해야하나?
- 오름차순으로 하려면?
반복문을 통해 코드 개선
import random
# lotto.py에 아래 코드 작성후
for i in range(6):
random_val = random.randrange(1,46)
print(random_val)
# 터미널에서 아래 명령어를 수행해보자.
# python3 lotto.py
32
1
41
13
1
10
반복적으로 생성된 숫자를 리스트에 담아보자.
import random
# 로또 번호를 담을 리스트 초기화
lotto_number = []
for i in range(6):
random_val = random.randrange(1,46)
print(f"{i}번째 숫자 {random_val }")
# 로또 번호 리스트에 담기
lotto_number.append(random_val )
print(lotto_number)
$ python lotto.py
0번째 숫자 12
1번째 숫자 5
2번째 숫자 43
3번째 숫자 19
4번째 숫자 19
5번째 숫자 43
[12, 5, 43, 19, 19, 43]
그럼 이제 두가지 처리가 남았다.
- 중복이 되면 안되고
- 오름차순이어야 한다.
중복값 처리
- 중복 처리를 위해 가장 쉽게 생각할 수 있는건
- ‘예전에 해당 값이 나왔으면 다시 추첨을 하자’라는 것이다.
- 이를 프로그래밍에 구현해보자.
import random
# 로또 번호를 담을 리스트 초기화
lotto_number = []
for i in range(6):
random_val = random.randrange(1,46)
# num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
# 없을때 까지 반복한다.
while random_val in lotto_number:
print(f"{num}은 이미 뽑혀서 다시 추첨하자")
random_val = random.randrange(1,46)
lotto_number.append(random_val )
print(f"{i}번째 숫자 {random_val }")
print(lotto_number)
$ python lotto.py
0번째 숫자 5
1번째 숫자 8
2번째 숫자 38
3번째 숫자 4
4번째 숫자 14
38은 이미 뽑혀서 다시 추첨하자
5번째 숫자 30
[5, 8, 38, 4, 14, 30]
- 이렇게까지 하면 1-45까지 숫자를 중복없이 6개 만들 수 있다.
- 그럼 이렇게 하면 우린 이미 로또 번호를 다 만든 것이나 다름없다.
- 그래도 한번 오름 차순으로 예쁘게 표현해보자.
import random
# 로또 번호를 담을 리스트 초기화
lotto_number = []
for i in range(6):
random_val = random.randrange(1,46)
# num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
# 없을때 까지 반복한다.
while random_val in lotto_number:
print(f"{random_val}은 이미 뽑혀서 다시 추첨하자")
random_val = random.randrange(1,46)
lotto_number.append(random_val )
print(f"{i}번째 숫자 {random_val}")
# 오름 차순으로 정렬
lotto_number.sort()
print(lotto_number)
$ python lotto.py
0번째 숫자 34
1번째 숫자 7
7은 이미 뽑혀서 다시 추첨하자
2번째 숫자 11
3번째 숫자 41
4번째 숫자 2
5번째 숫자 3
[2, 3, 7, 11, 34, 41]
자 그럼 이렇게 하면 로또 번호 생성기는 완성이 되었다. 👏👏👏
완성된 코드
import random
# 로또 번호를 담을 리스트 초기화
lotto_number = []
for i in range(6):
random_val = random.randrange(1,46)
# num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
# 없을때 까지 반복한다.
while random_val in lotto_number:
random_val = random.randrange(1,46)
lotto_number.append(random_val )
# 오름 차순으로 정렬
lotto_number.sort()
print(lotto_number)
반응형