파이썬으로 로또 만들기 프로젝트 1탄!
* 목표 *
- 원하는 숫자 6개를 중복 없이 리스트에 집어넣기
- 자동으로 숫자 하나를 뽑을 수 있다.
- 자동으로 나머지 모든 값을 선택할 수 있다.
Ch1. 원하는 숫자 6개를 중복 없이 리스트에 집어넣기
우리가 로또를 구매할 때마다 하는 일이 무엇인가? 첫 번째로 간절히 원하는 1에서 45 사이의 숫자 6가지를 선택해 마킹하는 일이다.
그러기 위해 빈 종이가 필요하며 작성할 컴퓨터 사인팬이 필요하다.
해당 프로그램에서의 빈종이는 'List'이며 컴퓨터 사인팬은 'input()'값이다. 코드를 보자.
import random
numlist = []
print("1부터 45까지 숫자를 입력하세요.")
# 원하는 숫자 선택
while 1:
if len(numlist) >= 6:
break
value = int(input())
if 1 <= value <= 45:
if value not in numlist:
numlist.append(value)
numlist.sort()
print("지금까지 입력한 숫자는 %s입니다." % numlist)
else:
print("1부터 45까지의 숫자만 넣어주세요.")
위 코드를 보면 'numlist = []'을 사용하여 빈종이([]는 빈 리스트를 의미)를 만든다.
다음으로 while문을 사용하여 무한 반복문(while 1은 항상 참이므로 무한 반복)을 만들었는데, 무한 반복을 선택한 이유는 6개의 숫자를 선택할 때 중복이 발생되면 되돌아가기 위해 사용했다.
무한 반복문을 사용 시 중요한 점은 반복되지만 조건에 맞는 끝 지점(break)을 정해서 반복문을 끝내야 하는 점이다.
해당 반복문은 리스트에 6개의 숫자(len()은 리스트의 길이를 나타냄)가 채워지면 끝나는 조건을 만들었다.
그다음 'input()' (컴퓨터 사인팬)을 이용해 원하는 숫자를 받는다. 물론 로또의 조건을 만족하는 숫자만 받아야 한다.
*조건*
- 1에서 45 사이의 숫자만 받을 것
- 숫자가 중복되지 않을 것
- 45가 넘어가면 다시 숫자를 받을 것
이 해당된다.
1번 조건은 if문을 사용하여 해결했다. (1~45 숫자 받기)
2번 조건은 파이썬에서만 사용 가능한 'not in'(만약 value 값이 numlist에 없다면을 의미함!)을 사용하였다.
3번 조건은 if / else 중 조건 이외의 것을 의미하는 'else'를 사용하여 사용자에게 알람을 주었다.
*추가 1* numlist.sort()에서 sort()는 리스트를 오름차순으로 정렬해 준다.
*추가 2* numlist.append(value)에서 append()는 리스트의 우측 끝에 value값을 추가한다.
Ch2. 자동으로 숫자 하나 뽑기
가끔 나 보다 그날의 운을 믿고 싶을 때가 있다. 그럴 때 사용되는 게 랜덤 뽑기이다. 랜덤으로 숫자 하나를 뽑아 보자.
print("랜덤한 숫자 1개를 입력하려면 숫자 77을 입력하세요.")
# 원하는 숫자 선택
#while 1:
# if len(numlist) >= 6:
# break
# value = int(input())
# if 1 <= value <= 45:
# if value not in numlist:
# numlist.append(value)
# numlist = list(set(numlist))
# numlist.sort()
# print("지금까지 입력한 숫자는 %s입니다." % numlist)
elif value == 77:
while 1:
randValue = random.randint(1, 45)
if randValue not in numlist:
numlist.append(randValue)
break
else:
continue
numlist.sort()
print("랜덤 숫자는 %d입니다." % randValue)
print("지금까지 입력한 숫자는 %s입니다." % numlist)
# else:
# print("1부터 45까지의 숫자만 넣어주세요.")
해당 프로그램은 값을 정수 타입(int())로 받기 때문에 '77'이라는 특정한 숫자를 사용하여 랜덤 뽑기를 실행함.
value(값)이 77이라면, random 함수를 사용하여 1~45 사이의 숫자 하나를 뽑아야 한다. 뽑은 값은 randValue에 저장. 여기서도 Ch1과 마찬가지로 무한 반복문이 사용되었는데, 혹시나 랜덤으로 뽑는 값이 이전에 뽑은 값과 중복이 되는 것을 방지하기 위해 만들어 놓은 장치이다.
조건을 만족하면 break를 사용하여 무한 반복문을 빠져나오고, 아닐 경우 continue로 반복문을 다시 시작한다.
Ch3. 자동으로 나머지 모든 값을 뽑는다.
로또를 살 때 번호를 적기도 하지만 "자동으로 얼마!"로 해당 점포의 운을 믿는 경우가 굉장히 많다. Ch3은 언제든 남아있는 값을 자동으로 채우기 위해 만든 코드이다.
# import random
# numlist = []
# print("1부터 45까지 숫자를 입력하세요.")
# print("랜덤한 숫자 1개를 입력하려면 숫자 77을 입력하세요.")
print("랜덤한 숫자로 선택을 끝내고 싶으면 숫자 20000을 입력하세요.")
# # 원하는 숫자 선택
# while 1:
# if len(numlist) >= 6:
# break
# value = int(input())
# if 1 <= value <= 45:
# if value not in numlist:
# numlist.append(value)
# numlist.sort()
# print("지금까지 입력한 숫자는 %s입니다." % numlist)
# elif value == 77:
# while 1:
# randValue = random.randint(1, 45)
# if randValue not in numlist:
# numlist.append(randValue)
# break
# else:
# continue
# numlist.sort()
# print("랜덤 숫자는 %d입니다." % randValue)
# print("지금까지 입력한 숫자는 %s입니다." % numlist)
elif value == 20000:
while 1:
randValue = random.randint(1, 45)
if len(numlist) < 6:
if randValue not in numlist:
numlist.append(randValue)
else:
continue
else:
break
numlist.sort()
print("지금까지 입력한 숫자는 %s입니다." % numlist)
# else:
# print("1부터 45까지의 숫자만 넣어주세요.")
Ch2와 같이 특정한 숫자 '20000'을 작성하면 6가지 번호 모두를 뽑고 코드가 종료되게 만들었다.
2중 if문을 사용하였는데, Ch1에 설명한 리스트의 길이를 나타내는 len()을 사용하여 리스트의 길이가 6 미만이라면 해당 코드를 반복하게 만들었다. 6이 넘을 경우 else: break를 이용해 코드를 끝냄.
이외 코드는 Ch1의 코드를 그대로 사용함.
결과 코드
전체 코드
import random
numlist = []
print("1부터 45까지 숫자를 입력하세요.")
print("랜덤한 숫자 1개를 입력하려면 숫자 77을 입력하세요.")
print("랜덤한 숫자로 선택을 끝내고 싶으면 숫자 20000을 입력하세요.")
# 원하는 숫자 선택
while 1:
if len(numlist) >= 6:
break
value = int(input())
if 1 <= value <= 45:
if value not in numlist:
numlist.append(value)
numlist.sort()
print("지금까지 입력한 숫자는 %s입니다." % numlist)
elif value == 77:
while 1:
randValue = random.randint(1, 45)
if randValue not in numlist:
numlist.append(randValue)
break
else:
continue
numlist.sort()
print("랜덤 숫자는 %d입니다." % randValue)
print("지금까지 입력한 숫자는 %s입니다." % numlist)
elif value == 20000:
while 1:
randValue = random.randint(1, 45)
if len(numlist) < 6:
if randValue not in numlist:
numlist.append(randValue)
else:
continue
else:
break
numlist.sort()
print("지금까지 입력한 숫자는 %s입니다." % numlist)
else:
print("1부터 45까지의 숫자만 넣어주세요.")
2탄은 결과값 랜덤뽑기 + 내가 선택한 값과 결과값 비교하기 입니다.
'프로그래밍 > Python' 카테고리의 다른 글
파이썬으로 로또 만들기 2탄 - 랜덤 값과 선택 값 비교 (0) | 2022.10.08 |
---|---|
[Python] Numpy(넘파이)로 그래프 그리기 (0) | 2020.08.26 |
[Python] Numpy(넘파이)로 행렬 만들기 (0) | 2020.08.26 |
[Python] 파이썬으로 타이머 만들기 (Feat. Time 모듈) (2) | 2020.08.16 |
댓글