Programmer's Diary/Python
[Python] 2022-02-07 개인 Project _ 로또 시뮬레이션 게임
powerstone
2022. 2. 12. 15:31
728x90
# 1. 모드 선택 (1.자동, 2.반자동, 3.수동)
# 2. 모드 별 번호 뽑기
# 2-1. 자동 모드 - 번호 6개 랜덤 추출
# 2-2. 반자동 모드 - 1~5개 번호 입력 받고 나머지 번호 5~1개 랜덤 추출
# 2-3. 수동 모드 - 6개 번호 입력 받기
# 3. 로또 번호 추첨
# 4. 당첨 결과 판정
# 5. 등수에 따른 당첨금 출력
import random
# 0. 입력 받는 경우 q를 누르면 프로그램을 종료
def quit(inputStr):
if inputStr == 'q':
exit("프로그램을 종료합니다.")
# 1. 모드 선택 (1.자동, 2.반자동, 3.수동)
def modeSelect():
while True:
print("*" * 50)
print("모드를 선택해 주세요.")
modeNumber = input("1.자동, 2.반자동, 3. 수동 => ")
quit(modeNumber)
# 입력된 값이 숫자가 아니면 모드 다시 입력 받기
if not modeNumber.isdigit():
print("1, 2, 3 중에 선택해 주세요.")
continue
modeNumber = int(modeNumber)
# 입력된 값이 숫자이지만 1, 2, 3 외의 값이 입력되면 다시 입력 받기
if modeNumber < 1 or modeNumber > 3 :
print("1, 2, 3 중에 선택해 주세요.")
continue
break
return modeNumber
# 2. 모드 별 번호 뽑기
def myNumber(modeNumber):
myNumberList = list()
# 2-1. 자동 모드 - 번호 6개 랜덤 추출
if modeNumber == 1:
myNumberList = random.sample(range(1, 46), 6)
# 2-2. 반자동 모드 - 1~5개 번호 입력 받고 나머지 번호 5~1개 랜덤 추출
elif modeNumber == 2:
# 번호 몇 개를 수동으로 입력할지 저장
while True:
print("반자동 모드입니다.")
inCount = input("번호 몇 개를 입력하시겠습니까? ")
quit(inCount)
# 입력된 값이 숫자가 아니면 모드 다시 입력 받기
if not inCount.isdigit():
print("1 ~ 5 중에 선택해 주세요.")
continue
inCount = int(inCount)
# 입력된 값이 숫자이지만 1 ~ 5 외의 값이 입력되면 다시 입력 받기
if inCount < 1 or inCount > 5:
print("1 ~ 5 중에 선택해 주세요.")
continue
break
# 수동으로 입력할 갯수만큼 번호 입력 받기
count = 1 # 입력받은 번호 갯수
while True:
number = input("{}개 숫자 중 {}번째 숫자 : ".format(inCount, count))
quit(number)
# 숫자가 입력되었는지 확인
if not number.isdigit():
print("1 ~ 45 사이 숫자를 입력하세요.")
continue
number = int(number)
# 숫자가 입력되었으면, 1 ~ 45 사이 숫자가 맞는지 확인
if number < 1 or number > 45:
print("1 ~ 45 사이 숫자를 입력하세요.")
continue
# 1~45 사이 숫자이지만 이전에 받은 번호와 중복되진 않는지 확인
if number in myNumberList:
print("번호가 중복되었습니다. 다시 입력해 주세요.")
continue
myNumberList.append(number)
if count == inCount: # 입력하려던 번호 갯수를 채우면 입력 종료
break
else:
count = count + 1
# 나머지 번호는 자동으로 추출
count = 1
while True:
number = random.randint(1, 45)
if number in myNumberList:
continue
else:
myNumberList.append(number)
if count == 6 - inCount:
break
else:
count = count + 1
# 2-3. 수동 모드 - 6개 번호 입력 받기
elif modeNumber == 3:
count = 1 # 입력받은 번호 갯수
while True:
number = input("6개 숫자 중 {}번째 숫자 : ".format(count))
quit(number)
# 숫자가 입력 되었는지 확인
if not number.isdigit():
print("1 ~ 45 사이 숫자를 입력하세요.")
continue
number = int(number)
# 숫자가 입력 되었으면, 1 ~ 45 사이 숫자가 맞는지 확인
if number < 1 or number > 45:
print("1 ~ 45 사이 숫자를 입력하세요.")
continue
# 1~45 사이 숫자이지만 이전에 받은 번호와 중복되진 않는지 확인
if number in myNumberList:
print("번호가 중복되었습니다. 다시 입력해 주세요.")
continue
myNumberList.append(number)
if count == 6: # 입력하려던 번호 갯수를 채우면 입력 종료
break
else:
count = count + 1
else:
print("모드 선택이 잘못되었습니다.")
# 번호 6개 모두 제대로 다 저장되었으면 오름차순 정렬
myNumberList.sort()
# print(myNumberList)
return myNumberList
# 3. 로또 번호 추첨
def lottoNumber():
lottoNumberList = random.sample(range(1, 46), 6) # 번호 6개 추첨
lottoNumberList.sort()
# 보너스 번호 추첨
while True:
bonus = random.randint(1, 45)
if bonus in lottoNumberList:
continue
else:
lottoNumberList.append(bonus)
break
print("$" * 50)
print("이번주 로또 번호는??")
for i in lottoNumberList[:6]:
print(i, end=" ")
print("+", bonus)
print("$" * 50)
return lottoNumberList
# 4. 당첨 결과 판정하여 등수 리턴
def result(myNumberList, lottoNumberList):
count = 0 # 맞는 번호 갯수
print("내 로또 번호 : ", end="")
# 맞는 번호에 동그라미(괄호) 쳐서 출력해주면서 맞는 갯수 카운트
for i in myNumberList:
if i in lottoNumberList[:6]:
print("({})".format(i), end=" ")
count = count + 1
elif i == lottoNumberList[6]:
print("(({}))".format(i), end=" ")
else:
print(i, end=" ")
print("")
print("$" * 50)
# 맞는 번호 갯수에 따른 등수 판정
rank = 0
if count == 6:
rank = 1
elif count == 5:
if lottoNumberList[6] in myNumberList:
rank = 2
else:
rank = 3
elif count == 4:
rank = 4
elif count == 3:
rank = 5
elif count <= 2 or count >= 0:
rank = 6
else:
print("error 발생")
exit()
if rank <= 5:
print("{}등 당첨을 축하드립니다!!!".format(rank))
else:
print("아쉽게도 낙첨 되셨습니다 ㅠㅠ")
return rank
# 5. 등수에 따른 당첨금 출력
def prize(rank):
if rank == 1:
print("당첨금은 1,000,000,000 원 입니다.")
elif rank == 2:
print("당첨금은 80,000,000 원 입니다.")
elif rank == 3:
print("당첨금은 2,000,000 원 입니다.")
elif rank == 4:
print("당첨금은 50,000 원 입니다.")
elif rank == 5:
print("당첨금은 5,000 원 입니다.")
elif rank == 6:
print("다음 기회에...")
else:
print("rank값 error")
exit()
while True:
modeNumber = modeSelect()
myNumberList = myNumber(modeNumber)
lottoNumberList = lottoNumber()
rank = result(myNumberList, lottoNumberList)
prize(rank)
quit(input("계속하려면 Enter, 종료하려면 'q'를 입력하세요 : "))
-------------------------------------------------------------------------------------------
<추가하고 싶은 것>
1. 로또를 산 랜덤 수의 사람 수 저장(4000만~5000만) => people
2. 총 판매액 = 1,000원 * people
3. 총 당첨금 = 총 판매액 * 50%
4. 랜덤 수의 사람들의 로또 당첨 판정하여 등수 별로 몇 명 당첨되었는지 저장
5. 그에 따른 등수별 당첨 금액 지정
- 1등 : 총 당첨금 중 4,5등 총 당첨금을 제외한 75%
- 2등 : 총 당첨금 중 4,5등 총 당첨금을 제외한 12.5%
- 3등 : 총 당첨금 중 4,5등 총 당첨금을 제외한 12.5%
- 4등 : 50,000원
- 5등 : 5,000원
6. 내 로또 번호는 몇 등에 얼마 받을지 출력
728x90