오늘의 주제는 31게임을 만드는 것이었습니다.
모두가 다아는 그 배스킨라빈스 31 게임이죠 ㅋㅋ
31 게임 만들기
오늘 만든 업다운 게임의 구조는
1. 배스킨라빈스 게임을 구현 다만 컴퓨터가 31을 부르면 져서 이를 회피하기 위한 알고리즘 같은 것은 구현하지 않고 랜덤 숫자만을 이야기하는 구조로 구현
2. 1번과 같이 배스킨라빈스 게임을 구현하지만 컴퓨터가 무조건 이길 수 있는 알고리즘을 탑재 - 지는 경우의 수가 1가지 있음
사용한 내용 정리
1. try: except: else: - 예외처리
ex) try:
computerchoice, mode = must_win(num, must, mode)
except:
print('컴퓨터가 머리쓰는 중입니다.')
else:
if 31 < num + computerchoice:
print('31 넘지 않는 수로 재계산 중입니다')
computerchoice, mode = computer_choice(num, must, mode)
return (computerchoice, mode)
else:
return (computerchoice, mode)
- try: 밑의 내용을 실행해보고 에러가 나오지 않으면 else를 실행 만약에 오류가 나오게 되면 except로 넘어가며 예외처리를 해주는 방법입니다.
2. 함수 다중인자 교환
ex) def must_win(num, must, mode):
if mode == 2 and num == 0:
must_num = 2
mode = 3
return (must_num, mode)
- 함수 만들때 return에 ( )로 만들어서 두가지 인자 튜플 형식으로 넘기기
-----------------------------------------------------------------------------
computerchoice, mode = must_win(num, must, mode)
- 함수 받을때 두가지 인자로 받기
문제점
처음 구상 단계에서 필승법이라고 생각된 숫자를 컴퓨터가 선점할 수 있게 하는 과정에서 모든 경우의 수를 if문으로 나열하는 방식으로 작성하여서 코드의 길이가 길어지는 문제가 있었습니다.
def must_win(num, must, mode):
if mode == 2 and num == 0:
must_num = 2
mode = 3
return (must_num, mode)
elif mode != 3:
if num < 2:
must_num = 2 - num
mode = 3
return (must_num, mode)
elif 2 < num < 6:
must_num = 6 - num
mode = 3
return (must_num, mode)
elif 6 < num < 10:
must_num = 10 - num
mode = 3
return (must_num, mode)
elif 10 < num < 14:
must_num = 14 - num
mode = 3
return (must_num, mode)
elif 14 < num < 18:
must_num = 18 - num
mode = 3
return (must_num, mode)
elif 18 < num < 22:
must_num = 22 - num
mode = 3
return (must_num, mode)
elif 22 < num < 26:
must_num = 26 - num
mode = 3
return (must_num, mode)
elif 26 < num < 30:
must_num = 30 - num
mode = 3
return (must_num, mode)
else:
must_num = int(random.randrange(1, 4))
return (must_num, mode)
해결
해당 문제는 진행되고 있는 숫자를 4로 나눈 나머지의 규칙으로 간략화시킬 수 있으므로 밑의 코드처럼 요약할 수 있겠습니다.
if mode == 2 and num == 0:
must_num = 2
mode = 3
return (must_num, mode)
elif num%4 == 3:
must_num = 3
mode = 3
return (must_num, mode)
elif num%4 == 0:
must_num = 2
mode = 3
return (must_num, mode)
elif num%4 == 1:
must_num = 1
mode = 3
return (must_num, mode)
else:
computer_call = random.randint(1,3)
return (must_num, mode)
'DevLog' 카테고리의 다른 글
[Setting]Robo 3T 설정하기 - MongoDB Database (0) | 2021.12.28 |
---|---|
[WIL]내일배움캠프 AI트랙 1기 2주차 주간회고 (0) | 2021.12.26 |
[파이썬 프로젝트] UP/DOWN 게임 만들기 (0) | 2021.12.21 |
[WIL]내일배움캠프 AI트랙 1기 1주차 주간회고 (0) | 2021.12.17 |
[Log]내일배움캠프 웹프로그래밍 1주차 개발일지 (0) | 2021.12.17 |