파이썬 독학/기초 실습

1. 파이썬 로또 번호 생성 프로그램(파이썬 소스 코드)

데니 by danny 2023. 5. 26. 01:15
반응형

첫 번째 파이썬 실습으로 6/45 로또 번호를 생성하는 프로그램을 작성해 볼게요.

 

실습은 점진적 개발 방법론을 적용해서 진행할게요.

 

개발 순서는 아래 목차를 참고해 주세요.

 

 

1. 파이썬 로또 번호 생성 프로그램

  ▶ 1~45자리 숫자 생성

num_1_45 = range(1, 46) #1부터 45개 숫자 생성

print(list(num_1_45))

 

위의 코드는 1부터 45까지의 숫자를 생성하여 리스트로 변환하여 출력하는 예시입니다.

 

range 함수를 사용하여 1부터 46 미만의 숫자 범위를 생성하고, 이를 list 함수로 리스트로 변환한 후 출력합니다.

 

*출력 결과*
[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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]

 

위의 출력 결과에서 볼 수 있듯이, num_1_45 변수에는 1부터 45까지의 숫자가 리스트 형태로 저장되어 있습니다.

 

 

  ▶ 6자리 랜덤 추출

import random

num_6_45 = random.sample(range(1, 46), 6) #1부터 45개 숫자 중에서 6개 추출
print(num_6_45)

 

위의 코드는 random.sample 함수를 사용하여 1부터 45까지의 숫자 중에서 6개를 무작위로 추출하는 예시입니다.

 

추출된 6개의 숫자는 리스트로 반환되어 출력됩니다.

 

*출력 결과*
[12, 6, 39, 20, 32, 4]

 

위의 출력 결과는 실행할 때마다 무작위로 추출되는 6개의 숫자를 보여줍니다.

 

추출된 숫자는 1부터 45까지의 범위에서 중복되지 않게 선택됩니다.

 

 

  ▶ 구매 건수 입력 받아서 번호 생성 후 출력

import random

#로또 번호 추출 프로그램
price_per_one_game = 1000

while True: # 반복문 while문 사용 무한루프
    
    inp = input("로또 구매 건수(문자 'q' 입력 시 종료) : ") #입력, 숫자만 입력 가능(단, 문자 q 입력 가능)
    
    if  inp == 'q': # q 입력 시 무한루프 종료 후 프로그램 정상 종료
        print(' [안내]종료합니다.\n')
        break
    elif ('\uAC00' <= inp <= '\uD7A3') or ('ㄱ' <= inp <= 'ㅎ') or ('ㅏ' <= inp <= 'ㅣ') or ('\u0041' <= inp <= '\u005A') or ('\u0061' <= inp <= '\u007A'): #한글 또는 영어 입력 시 안내 메세지 출력
        print(" [안내] 'q' 외 문자 입력 불가\n")
        continue    
    elif int(inp) <= 0: #숫자 0 이하 수 입력 시 안내 메세지 출력
        print(' [안내]0보다 큰 수를 입력하세요.(1~N)\n')
        continue
        
    
    cnt = int(inp) #입력 받은 구매 건수 정수로 변환
    lotto_set = list() #리스트 초기화

    for i in range(cnt): # 입력 받은 구매 건수 만큼 로또 번호 추출
        lotto_num_6_45 = random.sample(range(1, 46), 6) #1부터 45개 숫자 중에서 6개 추출
        lotto_num_6_45.sort() #오름차순 정렬
        lotto_set.append(lotto_num_6_45) #로또 집합 리스트에 추출 로또 번호 추가
        
    lotto_set.sort() #로또 집합 리스트 오름차순 정렬
    
    print(f'\n\n **** 로또6/45 추천번호 : {cnt}개 ****')
    
    for element in lotto_set: #생성된 로또 번호 모두 출력
        print(f'  {element}')
    print(f'**** 구매 예상 비용:{cnt*price_per_one_game:,}원 ****\n')

 

위의 코드는 로또 번호 추출 프로그램입니다. 사용자로부터 구매 건수를 입력받고,

 

해당 건수만큼 로또 번호를 추출하여 출력합니다. 또한, 구매 예상 비용도 표시됩니다.

 

프로그램은 무한 루프로 작동하며, 사용자가 'q'를 입력하면 종료됩니다.

 

사용자가 잘못된 입력을 하거나 0 이하의 숫자를 입력하면 해당 안내 메시지가 출력됩니다.

 

주의: 위의 코드를 실행하려면 import random을 추가해야 합니다.

 

*출력 결과*
로또 구매 건수(문자 'q' 입력 시 종료) : 3


 **** 로또6/45 추천번호 : 3개 ****
  [2, 7, 15, 24, 32, 40]
  [5, 9, 13, 20, 28, 43]
  [1, 10, 17, 22, 31, 39]
**** 구매 예상 비용:3,000원 ****

로또 구매 건수(문자 'q' 입력 시 종료) : q
 [안내]종료합니다.

 

 

  ▶ 구매 건수 입력 받아서 번호 생성 후 출력 후 txt파일로 저장

 

아래의 코드는 지금까지 출력한 로또 번호를 파일로 출력하는 기능을 추가한 코드입니다.

 

파일명은 "lotto_numbers.txt"로 지정되어 있습니다. 코드 내에 주석으로 설명을 추가하였습니다.

 

#로또 번호 추출 프로그램
price_per_one_game = 1000

while True: # 반복문 while문 사용 무한루프
    
    inp = input("로또 구매 건수(문자 'q' 입력 시 종료) : ") #입력, 숫자만 입력 가능(단, 문자 q 입력 가능)
    
    if  inp == 'q': # q 입력 시 무한루프 종료 후 프로그램 정상 종료
        print(' [안내]종료합니다.\n')
        break
    elif ('\uAC00' <= inp <= '\uD7A3') or ('ㄱ' <= inp <= 'ㅎ') or ('ㅏ' <= inp <= 'ㅣ') or ('\u0041' <= inp <= '\u005A') or ('\u0061' <= inp <= '\u007A'): #한글 또는 영어 입력 시 안내 메세지 출력
        print(" [안내] 'q' 외 문자 입력 불가\n")
        continue    
    elif int(inp) <= 0: #숫자 0 이하 수 입력 시 안내 메세지 출력
        print(' [안내]0보다 큰 수를 입력하세요.(1~N)\n')
        continue
        
    
    cnt = int(inp) #입력 받은 구매 건수 정수로 변환
    lotto_set = list() #리스트 초기화

    for i in range(cnt): # 입력 받은 구매 건수 만큼 로또 번호 추출
        lotto_num_6_45 = random.sample(range(1, 46), 6) #1부터 45개 숫자 중에서 6개 추출
        lotto_num_6_45.sort() #오름차순 정렬
        lotto_set.append(lotto_num_6_45) #로또 집합 리스트에 추출 로또 번호 추가
        
    lotto_set.sort() #로또 집합 리스트 오름차순 정렬
    
    print(f'\n\n **** 로또6/45 추천번호 : {cnt}개 ****')
    
    for element in lotto_set: #생성된 로또 번호 모두 출력
        print(f'  {element}')
    print(f'**** 구매 예상 비용:{cnt*price_per_one_game:,}원 ****\n')
    
    # 바탕화면에 txt파일로 출력
    with open("lotto_numbers.txt", "a") as file:
        file.write(f'로또6/45 추천번호 : {cnt}개\n')
        for element in lotto_set:
            file.write('  ' + str(element) + '\n')
        file.write(f'구매 예상 비용:{cnt * price_per_one_game:,}원\n')
        file.write('\n')

 

위의 코드를 실행하면 프로그램이 실행되는 동시에 "lotto_numbers.txt" 파일이 생성됩니다.

 

이 파일에는 지금까지 출력한 로또 번호와 구매 예상 비용이 기록됩니다.

 

계속해서 실행할 때마다 로또 번호와 비용이 추가로 기록됩니다.

 

주의: 파일을 열 때 "a" 모드로 열어서 추가로 쓰기를 하기 때문에,

 

기존의 파일 내용을 유지하면서 새로운 내용을 추가합니다.

 

만약 매번 새로운 내용만 기록하고 싶다면,

 

프로그램을 실행하기 전에 "lotto_numbers.txt" 파일을 삭제하거나 초기화해주세요.

 

로또 번호 추출 결과 파일 저장
로또 번호 추출 결과 파일 저장

반응형