- 다음과 같은 순서로 과제를 준비하였고, 주제 선정(자유) 및 코드 구현은 조별로 이루어짐.
- 이해 및 구현이 간단한 주제로 설정하였으나, 클래스나 메서드, DB 활용은 시간상 적용하지 못하여
추후 업데이트 하고자 함.
================================================================
[프로그래밍 절차]
1. 요구사항 정의
1) 작업명 : 파이썬 로또 번호 입출력 프로그램
2) 변수 : 입력번호, 출력번호, 당첨여부
2. 기능 정의 (필요한 객체, 메서드 정의)
- 분석
1) 로또번호 입력하기 (6개 순서대로)
2) 로또번호 생성하기 (6개 랜덤, +중복없이 1개 추가)
3) 2등 당첨 : 5개 번호 맞추고, 보너스 1개 맞추기 (2등)
4) 3등 당첨 : 5개
5) 4등 당첨 : 4개
6) 5등 당첨 : 3개
7) 미당첨시 메시지 출력 (2개이하)
- 설계
1) 입력번호 리스트 출력 (잘못된 입력시 메시지 출력하고 다시 시도)
2) 당첨번호 리스트 출력 : 중복없는 랜덤 난수 번호 6개 출력 (for문, while 사용)
3) 보너스 리스트 출력 : 2)와 중복없는 보너스번호 랜덤 난수번호 1개 추가 출력
3) 당첨여부 비교
: 입력번호리스트와 당첨번호리스트 (2등은 추가로 보너스번호 리스트) 중복되는 번호 개수 확인
-> 당첨여부 확인 및 메시지 출력 (if, elif 구문 사용)
3. 코딩
: 기능 실행 확인 (아래 코드 참조)
4. 리뷰 및 업데이트 (*예정)
- 클래스로 정의하고 코드 재수정
- 반복문으로 회차별 당첨번호 DB를 만든다
- DB를 만들어서 통계를 만든다
- 통계량 정보로 추천번호 리스트를 만든다
: 1000번 도전시 당첨 횟수 안에
1) 연속번호가 있는지, 몇번 나왔는지 확인.
2) 구간별 출현횟수 확인
================================================================
[코드 및 시연]
- User가 고른 로또번호 입력
- 당첨번호 랜덤 추출
- 당첨여부 비교 및 메시지 출력
import random
mine=[]
def user_input():
i=0
while i < 6:
number = int(input(f"{i+1}번째 숫자를 입력해주세요 : "))
if number in mine:
print("중복된 숫자는 입력할 수 없습니다.")
continue
if number <= 0 or number > 45:
print("범위 밖 숫자는 입력할 수 없습니다.")
continue
mine.append(number)
i += 1
user_input()
def bonus():
bonus=[]
a = True
bonus_num = 0
while a:
bonus_num = int(input("보너스 번호를 입력해주세요 : "))
if bonus_num in mine:
print("중복된 숫자는 입력할 수 없습니다.")
elif bonus_num <= 0 or bonus_num > 45:
print("범위 밖 숫자는 입력할 수 없습니다.")
else:
a = False
bonus.append(bonus_num)
print('내가 입력한 번호는',mine,bonus)
bonus()
list = [] # 리스트 만들기
ran_num = random.randint(1,45) # 변수에 1~45 사이 랜덤 난수값 1개 리턴
for i in range(6): # 6번 반복하기
while ran_num in list: # 리스트에 ran_num이 있으면(True이면)
ran_num = random.randint(1,45) # 랜덤 난수값 1개 리턴 실행
list.append(ran_num) # 리스트 객체 끝에 뽑힌 숫자 추가
list.sort()
print('당첨번호는!',list)
C = [i for i in list if i in mine]
print('맞춘 숫자 개수는:',len(C))
if len(C) == 6:
print('1등에 당첨되셨습니다.')
elif len(C) == 5 and bonus in ran_num:
print('2등에 당첨되셨습니다.')
elif len(C) == 5 :
print('3등에 당첨되셨습니다.')
elif len(C) == 4 :
print('4등에 당첨되셨습니다.')
elif len(C) == 3 :
print('5등에 당첨되셨습니다.')
elif len(C) == 2 :
print('예쁜 쓰레기가 되었습니다.')
elif len(C) == 1 :
print('휴지통에 넣으시면 됩니다.')
elif len(C) == 0 :
print('꽝.')
-> 출력
1번째 숫자를 입력해주세요 : 31
2번째 숫자를 입력해주세요 : 43
3번째 숫자를 입력해주세요 : 28
4번째 숫자를 입력해주세요 : 33
5번째 숫자를 입력해주세요 : 51
범위 밖 숫자는 입력할 수 없습니다.
5번째 숫자를 입력해주세요 : -1
범위 밖 숫자는 입력할 수 없습니다.
5번째 숫자를 입력해주세요 : 31
중복된 숫자는 입력할 수 없습니다.
5번째 숫자를 입력해주세요 : 44
6번째 숫자를 입력해주세요 : 19
보너스 번호를 입력해주세요 : 37
내가 입력한 번호는 [31, 43, 28, 33, 44, 19] [37]
당첨번호는! [7, 14, 20, 22, 31, 44]
맞춘 숫자 개수는: 2
예쁜 쓰레기가 되었습니다.
- 여러건에 대한 당첨여부 확인
import random
list = [] # 리스트 만들기
ran_num = random.randint(1,45) # 변수에 1~45 사이 랜덤 난수값 1개 리턴
for i in range(6): # 6번 반복하기
while ran_num in list: # 리스트에 ran_num이 있으면
ran_num = random.randint(1,45) # 랜덤 난수값 1개 리턴 실행
list.append(ran_num) # 리스트 객체 끝에 뽑힌 숫자 추가
list.sort()
print('이번 회차 당첨번호:', list)
a = [] # 빈 전체 리스트 생성
for i in range(20):
b = []
ran_num = random.randint(1,45)
for j in range(6):
while ran_num in b: #리스트에 ran_num이 있으면
ran_num = random.randint(1,45) #random 숫자를 뽑아서 저장
b.append(ran_num) #리스트에 ran_num을 추가
b.sort()
a.append(b) # 전체 리스트에 안쪽 리스트를 추가
a.sort()
print('내돈내산 로또번호: ')
from pprint import pprint
pprint(a,indent=6, width=50)
print('이 중에 1등 당첨이 있나요?', list == a) #당첨번호 여부 확인
-> 출력
이번 회차 당첨번호: [1, 3, 17, 37, 38, 41]
내돈내산 로또번호:
[ [1, 5, 6, 15, 22, 37],
[1, 9, 13, 20, 36, 41],
[2, 6, 15, 20, 37, 43],
[2, 13, 16, 20, 33, 39],
[3, 6, 17, 28, 31, 38],
[4, 8, 10, 22, 24, 37],
[4, 14, 20, 28, 44, 45],
[5, 7, 8, 12, 16, 33],
[5, 9, 19, 33, 34, 36],
[5, 12, 17, 27, 28, 30],
[6, 10, 17, 24, 25, 31],
[6, 12, 13, 24, 40, 45],
[7, 10, 11, 18, 35, 40],
[8, 11, 17, 25, 27, 42],
[9, 20, 21, 30, 39, 45],
[11, 23, 27, 31, 36, 41],
[11, 23, 27, 33, 35, 39],
[11, 23, 29, 30, 34, 35],
[14, 15, 16, 24, 41, 45],
[18, 24, 32, 38, 43, 45]]
이 중에 1등 당첨이 있나요? False
'인공지능 개발자 양성 과정' 카테고리의 다른 글
[0517] 웹프로그래밍과 파이썬 (0) | 2022.05.17 |
---|---|
[0428] NoSQL - 몽고DB 다루기 (0) | 2022.05.08 |
[0426] 웹스크래핑 (0) | 2022.05.08 |
데이터베이스의 정석 요약 (ch5. SQL 기초) (0) | 2022.05.08 |
[0426] R 중간점검 (은행마케팅 - 20대 고객 탐색적 데이터 분석) (0) | 2022.04.28 |