인공지능 개발자 양성 과정

파이썬 - 로또번호 입출력 프로그래밍 실습 (0526)

AI gina 2022. 5. 27. 07:17

- 다음과 같은 순서로 과제를 준비하였고, 주제 선정(자유) 및 코드 구현은 조별로 이루어짐.

- 이해 및 구현이 간단한 주제로 설정하였으나, 클래스나 메서드, 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