(본 블로그의 내용은 유튜브 동영상(파이썬 로또 번호 맞추기 게임 만들기)에서 더욱 자세히 보실 수 있습니다.)
#################################################################################
################### 1.당첨번호를 랜덤으로 추출 하는 부분
#################################################################################
import random
lotto = [] # lotto 리스트를 만들고
while True:
num = random.randint(1,45) # 1~45의 숫자 중 랜덤한 수를 num변수에 저장
if num not in lotto: # lotto 리스트에 해당 숫자가 없으면 넣는다.
lotto.append(num)
if len(lotto) == 6: # lotto 리스트에 6개의 숫자가 들어 있으면 빠져 나온다.
break; # while문을 빠져 나옴
print(lotto) # 당첨 번호 확인
#################################################################################
################### 2.내가 입력한 번호를 저장
#################################################################################
#################################################################################
################### 4.사용자의 입력값이 올바른지 점검 후 예외 처리
#################################################################################
inputStr = input("내 로또번호 입력(띄어쓰기로 6개 입력): ").split(" ") # split()함수로 input의 문자열을 " "으로 구분
print(inputStr) # inputStr 리스트안에 문자열로 저장됨
# print(type(inputStr)) # inputStr 타입을 확인(list)
mine = []
for n in inputStr: # inputStr 리스트의 내용물을 하나씩 int로 타입을 변경 후 mine 리스트에 넣어줌
#################################################################################
# 4.1.사용자가 입력한 값을 하나씩 숫자인지(isdigit()) 확인하고, 해당 숫자가 1~45 사이인지 확인, 맞으면 mine 리스트에 추가
#################################################################################
if n.isdigit() == True and (int(n) >=1 and int(n) <=45):
mine.append(int(n))
else:
break; # 사용자가 입력한 값이 1~45사이의 숫자가 아니면 for문을 빠져나옴
print(mine) # mine 리스트안에 숫자로 저장됨
#################################################################################
################### 3.당첨번호와 내가 입력한 번호를 비교
#################################################################################
#################################################################################
if len(mine) !=6: # 4.2.사용자가 입력한 값이 숫자이지만, 6개가 아낸 경우 예외처리 해줌
#################################################################################
print("입력값이 올바르지 않거나(숫자아님), 6개가 아닙니다.")
else:
# 내 번호가 lotto 당첨번호 리스트에 포함되어 있는지 체크
same = 0
mynum = ""
for myN in mine: # mine 리스트의 내용물을 하나씩 확인 후 lotto 리스트에 있으면 same(맞춘 개수)dmf 1개씩 늘려줌
if myN in lotto:
same = same + 1
mynum = mynum + str(myN) + " "
print("맞춘 개수는 : ", same) # 내가 입력한 숫자(mine)와 랜덤하게 생성된 숫자(lotto) 사이에 동일한 숫자가 몇 개인지 출력
#당첨번호와 내번호가 같은지 눈으로 확인하는 테스트 코드
print("당첨번호 ", lotto)
print("내번호 ", mine)
print("내가 맞춘 번호는 : ", mynum)
#same에 따라 인덱싱해서 등수 표기
score = [0,6,5,4,3,2,1]
if same == 0: # same(맞춘개수)이 0이면 그에 맞는 메시지 출력
print("동일한 번호가 하나도 없습니다.")
else:
print(f"{same}개 맞음, {score[same]} 등 당첨!!!") # 1개 맞춘 경우(same=1) score[1]이므로 6등임
- 당첨번호를 랜덤하게 생성하기 위해서 random.randint(1,45)를 사용하여 1~45사이의 숫자 6개를 lotto 리스트에 넣습니다. 변수를 리스트에 담기 위해서 append를 사용하였습니다.
- 마찬가지로 내가 입력한 번호를 저장하기 위해서 입력값을 inputStr로 받고, mine리스트에 담습니다.
- 당첨번호와 내가 입력한 번호를 비교 후 맞춘 개수(same)를 셉니다.
- 동일한 번호가 있으면 맞춘 개수를 표시해 주고, 그렇지 않으면 맞추지 못함을 알려줍니다.
- 프로그램에서 오류가 존재하는데, 사용자 입력시 문자를 입력하거나, 1~45 숫자가 아닌 수를 입력하거나, 6개 숫자가 아닌 1개 또는 7개 등을 입력시 에러가 발생함을 확인합니다.
- 문자 입, 1~45 숫자가 아닌 수 입력, 6개 숫자가 아닌 1개 또는 7개 등을 입력시 에러에 대하여 아래와 같이 if문을 활용하여 수정해 줍니다.
- 리스트에 값을 추가하는 방법을 알았습니다.(xx.append)
- 루프에서 빠져나가는 방법을 배웠습니다.(break;)
- 에러 발생시 에러를 처리 하는 예외처리 방법을 알았습니다.(try~ except)
- 위의 프로그램은 한가지 문제점이 있습니다. 사용자가 동일한 숫자를 입력시 해당 숫자가 당첨되는 경우 중복 카운드를 한다는 것입니다.
- 예를 들어 아래에서 보듯이 33을 2번 입력하면 내가 맞춘 번호에 33 한번 나오는 것이 아니라 33 33 2번으로 카운트 하는 오류가 발생합니다.
- 아래 오류를 개선하는 프로그램을 직접 스스로 만들어 보시기를 적극 권장 드립니다.
오늘은 이렇게 윈도우 계산기를 작성하는 소스코드를 작성해보고 실습해 보았습니다.
내용 중 이해가 되지 않거나, 더 좋은 방법들이 있다면 댓글로 의견을 주시기 바라며,
내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > 게임 만들기' 카테고리의 다른 글
파이썬 GUI 영어단어맞추기 게임 (0) | 2022.10.18 |
---|---|
파이썬 GUI 숫자 야구게임 만들기 (0) | 2022.10.09 |
파이썬 숫자 야구 게임 만들기 (0) | 2022.08.15 |
파이썬 타자 게임 만들기 (0) | 2022.08.09 |
파이썬 단어 맞추기 게임 만들기 (0) | 2022.08.09 |