Chapter 6 : Python - practice (assignment for myself)
안녕하세요, 오늘은 새로운 내용을 공부하기 보단
지금까지 배운 내용을 한번 더 익힐겸 자체 실습과제를 만들어보았습니다.
파이썬을 배울수록 작성할 수 있는 코드가 점점 다양해지고
만들어보고 싶은 프로그램도 직접 만들 수 있게 되는 것 같아요:)
아직 멀었지만 이런 시도 하나하나가
저를 성장의 길로 이끌어줄 것이라 믿습니다.
주제 : 복권번호 발급 프로그램
오늘 만들어볼 프로그램 주제는바로 복권번호 발급입니다!!
사실은 제가 초반에 랜덤함수를 처음 배울때부터
딱 생각이 나서 점 찍어뒀는데요,
그때는 리스트도 그렇고 함수도 그렇고
아직 제대로 다룰 줄 아는게 없어서 나중을 기약하고 있었는데
드디어 만들어볼 수 있겠다는 생각이 들었답니다:)
조건
- 함수를 반드시 사용하여 프로그램 작성할 것
- 복권 금액은 1000원~5000원을 입력받아 번호를 발급할 것
- 1~45까지의 무작위 번호 6개를 뽑아 리스트 형태로 출력
- 리스트 내의 번호는 중복이 불가하며 오름차순으로 출력할 것
- 1000원은 한 줄, 2000원은 두 줄...금액에 맞게 출력
- 반목문과 조건문을 반드시 사용할 것
그동안 배운 내용을 최대한 포함시키고자
제 나름대로의 작성 조건도 만들어놓았습니다 ㅎ
1번 조건) 무조건 함수를 이용해야하니까
def를 통해 함수를 정의해줄 것이고,
2번 조건) 복권금액을 천원에서 오천원으로 입력 받는다고 했으니
함수의 매개변수는 input()을 통해 입력받아야겠군요.
3번 조건) 번호를 무작위로 뽑아야하니 randint()를 사용해야 하는데
6개까지만 뽑아야 하니까 이건 반복문에서 처리하면 될 것 같습니다.
4번 조건) 리스트 내에서 중복이 불가능해야 하니까
if~in을 사용하고 append()도 사용해야한다는게 그려지네요!
거기에 오름차순이니 sort()가 필요하겠고..
5번 조건) 실제 복권 판매점에서도 1000원에 번호 한줄이니까
가격에 따라 출력되는 리스트의 갯수가 달라죠야한다는 뜻입니다.
이것도 반복문에서 다루어야겠네요.
6번 조건) 사실 없어도 무조건 반복문과 조건문을 사용해야할 것 같아요:)
완성코드
from random import *
def make_number():
number_list = []
while True:
if len(number_list) == 6:
break
lottery_number = randint(1, 45)
if lottery_number in number_list:
lottery_number = randint(1, 45)
else:
number_list.append(lottery_number)
number_list.sort()
return number_list
def init(price):
dictt = {1000: 1, 2000: 2, 3000: 3, 4000: 4, 5000: 5}
if price in dictt.keys():
index = 0
while index < dictt[price]:
print(make_number())
index += 1
reply = ""
while True:
if reply == "Y":
reply = input("복권을 추가로 구매하시겠습까?(Y or N)")
if reply == "Y":
reply = "N"
continue
elif reply == "N":
print("이용해 주셔서 감사합니다.")
break
else:
print("입력값을 확인해주세요.")
reply = "Y"
continue
price = input("복권 금액을 입력해주세요.(1000~5000)")
price = int(price)
init(price)
reply = "Y"
- make_number함수는 1부터 46까지의 숫자 중에서 중복되지 않는 6개의 숫자를 랜덤으로 생성하여 리스트로 반환합니다. 중복된 숫자가 생성되면 다시 생성하여 중복을 피합니다. 마지막으로 숫자 리스트를 오름차순으로 정렬하여 반환합니다.
- init함수는 매개변수로 받은 price에 따라 복권을 초기화합니다. 변수 dictt 는 복권 금액과 그에 해당하는 구매 횟수를 저장한 딕셔너리입니다. price가 딕셔너리의 키에 있는 경우, 해당 횟수만큼 make_number함수를 호출하여 복권 번호를 출력합니다.
- 변수 reply는 사용자의 입력을 받아 복권 추가 구매 여부를 확인하는데 사용됩니다. 초기값은 빈 문자열입니다.
- while True 반복문을 통해 사용자와의 상호작용을 구현합니다. 사용자가 "Y"를 입력하면 복권 추가 구매 여부를 묻고, "N"을 입력하면 프로그램을 종료합니다. "Y" 또는 "N" 이외의 입력은 "입력값을 확인해주세요."라는 메시지를 출력하고 다시 "Y"를 입력하도록 합니다.
- 사용자로부터 복권의 금액을 입력받아 변수 price에 저장한 후, init 함수를 호출하여 해당 금액에 맞는 복권을 초기화합니다.
- 마지막으로 변수 reply를 "Y"로 설정하여 다음 복권 추가 구매 여부를 묻도록 합니다.
출력결과
프로그램을 실행시키면 while문에서 input으로 제시했던
“복권금액을 입력해주세요.(1000~5000)”라는 문구가 나오고
제가 1000을 입력해보았습니다.
그랬더니 복권번호 6자리가 하나의 리스트로 출력이되었고
추가 구매 질문에 대해서 Y를 대답했더니 또다시 처음으로 돌아갔습니다.
다음엔 5000을 입력해서 5줄의 번호가 생성 및 출력되었고,
추가 구매에 대한 질문에 대해서는 Y도 N도 아닌 o를 입력해봤습니다.
예외처리로 else를 타게 돼서 “입력값을 확인해주세요.”라는 문구가 출력되면서
동시에 복권 추가 구매에 대한 질문이 제시됩니다.
이번엔 N을 입력했더니 감사인사와 함께 프로그램이 종료되었습니다.
포스팅으로는 이미 다 만들어 놓은 코드와
그에 대한 설명만 보이기 때문에 굉장히 쉽게 만든 것 처럼 보이지만
이 코드를 다 작성하는데 굉장히 오래 걸렸답니다..ㅎㅎ
다음에도 배운 내용을 기반으로 자체 실습과제를 풀어보겠습니다.
오늘은 여기까지!