- 간단한 프로그램 만들기 8 (로또 키오스크 만들기)2026년 04월 17일
- 소쩍소쩍이
- 작성자
- 2026.04.17.:53
로또 키오스크 만들기
로또 키오스크를 만들어 볼 것이며 조건은 이렇습니다.
입력받은 값은 예외가 없도록 만들어 주세요.
자동, 반자동, 수동을 선택하세요.
최대 1~5개의 로또를 선택하세요.
입금과 잔돈을 결제하고, 결제 결과로 영수증을 출력하세요.
영수증에 발행일시(현재), 추첨일(해당 주 토요일), 지급기한(1년)을 출력하세요.
1. 모듈 불러오기
일단 2개의 모듈을 가져와야 합니다.
import datetime import random2. 구매 개수 입력 함수
처음으로 로또의 구매 개수를 확인하는 함수이고 실제 로또와 같이 최소 1개, 최대 5개까지 구매할 수 있도록 해 놓았습니다.
def buy(): while True: num1_input = input("구매 갯수를 적으세요 >> ") if num1_input.strip() == "": continue buy_num = int(num1_input) if 1 <= buy_num <= 5: return buy_num else : print("잘못된 숫자를 입력 하셨습니다.") print("갯수는 1~5개 입니다.")3. 로또 번호 선택 방식
그 후 어떤 방식으로 로또 번호를 받을 것인지 정하는 곳
def mode(): while True: num2_input = input(""" 1. 자동 2. 반자동 3. 수동 입력 >> """) if num2_input.strip() == "": print("다시 입력해 주세요") continue mode_num = int(num2_input) if mode_num in [1,2,3]: return mode_num else: print("1~3번 중에 골라 주세요")각 모드는 자동, 수동, 반자동으로 나누었습니다.
자동 모드
# 자동 모드 def outo_mode(): b = [] while len(b) < 6: n = random.randint(1,45) if n not in b: b.append(n) return b수동 모드
# 수동모드 def self(): b = [] while len(b)<6: num = int(input(f"{len(b)+1}번 입력 >> ")) if not ( 1<= num <= 45): print("1~45의 숫자 중 입력해 주세요") elif num in b : print("중복입니다.") print("다시 입력해 주세요") else: b.append(num) return b반자동 모드
# 반자동 모드 def semi_outo(): b = [] while len(b)<6: num = int(input(f"{len(b)+1}번 입력 >> ")) if num == 0: while len(b) < 6: n = random.randint(1,45) if n not in b: b.append(n) break if not ( 1<= num <= 45): print("1~45의 숫자 중 입력해 주세요") elif num in b : print("중복입니다.") print("다시 입력해 주세요") else: b.append(num) return b4. 출력표 만들기
이렇게 모드들을 나누고, 우리가 로또를 살 때 종이를 받는 것처럼 그 종이를 표현하는 출력표를 만들었습니다.
제일 아래에 있는 입금액, 결제금액, 잔돈 부분은 위에 코드에서 안 보이는데 어디 있나 하실 수도 있는데 이 부분은 나중에 추가로 넣었습니다.
# 출력표 def print_lotto(result,money,price,change): today = datetime.datetime.today() + datetime.timedelta(hours=9) days_sat = (5 - today.weekday()) % 7 draw_day = today + datetime.timedelta(days=days_sat) expire_day = draw_day + datetime.timedelta(days=365) print("Lotto 6/45") print("발행일 : ", today.year,"/", today.month,"\t(" ,today.day,")\t", today.hour,":", today.minute,":", today.second) print("추첨일 : ", draw_day.year,"/", draw_day.month,"\t(" ,draw_day.day,")") print("지급기한 : ", expire_day.year,"/", expire_day.month,"\t(" ,expire_day.day,")") for i in range(len(result)): print("♣",result[i],"♣") print("-----------------------------------------------------") print("입금액 : ", money, "원") print("결제금액 : ", price, "원") print("잔돈 : ", change, "원")5. 실행 함수 만들기
이후 로또 실행 함수를 만들어 실행 함수를 불러온다면 로또 키오스크가 완성!!
# 실행 def LOTTO(): print("-----------------------------------------------------") buy_count = buy() mode_m = mode() money, price, change = pay(buy_count) result = [] if mode_m == 1: print("자동을 선택") for i in range(buy_count): result.append(outo_mode()) elif mode_m == 2: print("반자동을 선택") print("0을 입력하면 자동으로 넘어갑니다.") for i in range(buy_count): print(f"{i+1}번 입력") result.append(semi_outo()) elif mode_m == 3: print("수동을 선택") for i in range(buy_count): print(f"{i+1}번 입력") result.append(self()) print_lotto(result, money, price, change)6. 결제 금액 함수 추가
위에서 말한 추가로 넣은 결제 금액 함수이고 추가로 넣다 보니 오류가 좀 나왔지만, 오류에 대한 것은 다음 글에 작성할 예정입니다.
# 금액 결제 def pay(buy_count): price = buy_count * 1000 while True: money_input = input("입금 금액을 입력하세요 >> ") if money_input.strip() == "": continue money = int(money_input) if money < price: print("금액이 부족합니다.") print(f"{price}원 이상 입력해주세요.") continue change = money - price return money, price, change
코드 전문
import datetime import random # 로또 구매 갯수 결정 def buy(): while True: num1_input = input("구매 갯수를 적으세요 >> ") if num1_input.strip() == "": continue buy_num = int(num1_input) if 1 <= buy_num <= 5: return buy_num else : print("잘못된 숫자를 입력 하셨습니다.") print("갯수는 1~5개 입니다.") # 자동 반자동 수동 결정 def mode(): while True: num2_input = input(""" 1. 자동 2. 반자동 3. 수동 입력 >> """) if num2_input.strip() == "": print("다시 입력해 주세요") continue mode_num = int(num2_input) if mode_num in [1,2,3]: return mode_num else: print("1~3번 중에 골라 주세요") # 자동 모드 def outo_mode(): b = [] while len(b) < 6: n = random.randint(1,45) if n not in b: b.append(n) return b # 수동모드 def self(): b = [] while len(b)<6: num = int(input(f"{len(b)+1}번 입력 >> ")) if not ( 1<= num <= 45): print("1~45의 숫자 중 입력해 주세요") elif num in b : print("중복입니다.") print("다시 입력해 주세요") else: b.append(num) return b # 반자동 모드 def semi_outo(): b = [] while len(b)<6: num = int(input(f"{len(b)+1}번 입력 >> ")) if num == 0: while len(b) < 6: n = random.randint(1,45) if n not in b: b.append(n) break if not ( 1<= num <= 45): print("1~45의 숫자 중 입력해 주세요") elif num in b : print("중복입니다.") print("다시 입력해 주세요") else: b.append(num) return b # 금액 결제 def pay(buy_count): price = buy_count * 1000 while True: money_input = input("입금 금액을 입력하세요 >> ") if money_input.strip() == "": continue money = int(money_input) if money < price: print("금액이 부족합니다.") print(f"{price}원 이상 입력해주세요.") continue change = money - price return money, price, change # 출력표 def print_lotto(result,money,price,change): today = datetime.datetime.today() + datetime.timedelta(hours=9) days_sat = (5 - today.weekday()) % 7 draw_day = today + datetime.timedelta(days=days_sat) expire_day = draw_day + datetime.timedelta(days=365) print("Lotto 6/45") print("발행일 : ", today.year,"/", today.month,"\t(" ,today.day,")\t", today.hour,":", today.minute,":", today.second) print("추첨일 : ", draw_day.year,"/", draw_day.month,"\t(" ,draw_day.day,")") print("지급기한 : ", expire_day.year,"/", expire_day.month,"\t(" ,expire_day.day,")") for i in range(len(result)): print("♣",result[i],"♣") print("-----------------------------------------------------") print("입금액 : ", money, "원") print("결제금액 : ", price, "원") print("잔돈 : ", change, "원") # 실행 def LOTTO(): print("-----------------------------------------------------") buy_count = buy() mode_m = mode() money, price, change = pay(buy_count) result = [] if mode_m == 1: print("자동을 선택") for i in range(buy_count): result.append(outo_mode()) elif mode_m == 2: print("반자동을 선택") print("0을 입력하면 자동으로 넘어갑니다.") for i in range(buy_count): print(f"{i+1}번 입력") result.append(semi_outo()) elif mode_m == 3: print("수동을 선택") for i in range(buy_count): print(f"{i+1}번 입력") result.append(self()) print_lotto(result, money, price, change) LOTTO()
순서도

'파이썬 > 문제 및 예제' 카테고리의 다른 글
간단한 프로그램 만들기 7 (야구게임) (0) 2026.04.17 간단한 프로그램 만들기 1 (계산기) (0) 2026.04.16 함수 예제 및 문제 (0) 2026.04.13 리스트 예제 및 문제 (0) 2026.04.10 반복구조 예제 및 문제 (0) 2026.04.09 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)