Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- async
- dict
- node
- MongoDB
- pandas
- Vue
- crud
- 채팅
- 카톡
- wetube
- RDS
- 파이썬
- SSA
- flask
- SAA
- TypeScript
- 튜플
- socket io
- Props
- Class
- docker
- EC2
- 중급파이썬
- AWS
- git
- merge
- lambda
- react
- NeXT
- S3
Archives
- Today
- Total
초보 개발자
두 번째 개인 과제 베스킨 라빈스 31 게임 본문
일반적인 베스킨라빈스 31게임
import random
# 31게임을 위한 배열 1 ~ 31
numbers = [i for i in range(1,31+1)]
# player가 0이면 user, 1이면 computer를 의미함
player = random.randrange(0,2)
def user(array):
global player
# 1~3사이의 숫자 그리고 배열의 갯수보다 많이 말하면 안됨
while True:
num = int(input('1~3의 숫자를 입력해주세요.'))
if 1 <= num <=3 and num <= len(numbers):
break
print('다시 입력해주세요')
for i in range(num):
print('플레이어 :', array[0])
del array[0]
player = 1
def computer(array):
global player
num = random.randrange(1, 4)
if len(numbers) <= 3:
num = len(numbers) - 1
if (num==0):
num = 1
for i in range(num):
print('컴퓨터 :',array[0])
del array[0]
player = 0
# 배열에 요소 가 남지 않으면 while문 탈출
while 0 < len(numbers):
if player == 0:
user(numbers)
else:
computer(numbers)
if player == 0:
print('플레이어의 승리 입니다.')
else:
print('컴퓨터의 승리 입니다.')
단 한가지 경우를 제외하고 컴퓨터가 이기는 베스킨라빈스 31게임
컴퓨터가 '무조건'이길려면 30을 가져와야한다. 그래야 user가 31을 말할테니,
근데 user입장에서도 이길려면 30을 가져와야한다. 따라서 둘 다 게임을 이기기 위해 30을 확정적으로 가져올려면
26이라는 숫자를 먼저 선점하는 player가 30을 말할 수 있을 것이다. 이런식으로 체인을 타고 내려가면 아래와 같다.
2 6 10 14 18 22 26 30 이 숫자 중 하나라도 가져오면 우위를 선점할 수 있다. 왜냐면 확정적으로 그 다음 체인을 타고 갈 수 있기 때문에
import random
# 31게임을 위한 배열 1 ~ 31
numbers = [i for i in range(1,31+1)]
# player가 0이면 user, 1이면 computer를 의미함
player = random.randrange(0,2)
#user의 함수
def user(array):
#player 를 바꿔주기 위해 (user -> computer)
global player
while True:
#숫자 유효성 검사 1 ~ 3 숫자, numbers의 갯수보다 많으면 안됨
num = int(input('1~3의 숫자를 입력해주세요.'))
if 1 <= num <=3 and num <= len(array):
break
print('다시 입력해주세요')
# 갯수만큼 list에서 삭제
for i in range(num):
print('플레이어 :', array[0])
del array[0]
#공수 교대 (user -> computer)
player = 1
def computer(array):
# 필승 조건임
list = [2,6,10,14,18,22,26,30]
# player 를 바꿔주기 위해 (user -> computer)
global player
# range_num 이란걸 일단 None로 설정해두고
range_num = None
# array가 3보다 작으면 이 분기문을 탄다.
if len(array) <= 3:
#range_num에 array의 길이를 집어 넣는다.
range_num = len(array)
# array가 3보다 작기 전까진 3번을 확인
# 이유는 내가 필승 조건을 맞추기 위해 최대 3개말할 수 있기 때문에 (1,2,3!)
# 근데 range(3)이라고만 적어두면 마지막에 IndexError: list index out of range가 난다
# 따라서 range_num을 통해서 그걸 해결
# for에서 break가 걸렸다는 것은 필승 조건에 해당하는 숫자를 찾았다는 뜻
for i in range( range_num or 3):
if array[i] in list:
num = i + 1
break
#else로 빠졌다는 것은 compteur가아닌 user가 필승 조건에 해당하는 숫자를 찾았다는 뜻
#따라서 random으로 돌려주었다.
else:
num = random.randrange(1, 4)
# 이 분기문으로 들어왔다는 것은
# 30을 선점하지 못했다는 뜻이므로 num은 1이 되어야만 한다.
if len(array) <= 3:
num = 1
for i in range(num):
print('컴퓨터 :',array[0])
del array[0]
player = 0
# 배열에 요소 가 남지 않으면 while문 탈출
while 0 < len(numbers):
if player == 0:
user(numbers)
else:
computer(numbers)
# 마지막에 player가 된 사람이 진 것이다.
if player == 0:
print('플레이어의 승리 입니다.')
else:
print('컴퓨터의 승리 입니다.')
'AI 웹개발 트랙 - 내배캠 > 2주차' 카테고리의 다른 글
5번째 과제 인스타 화면 구현 및 튜터님 코드 분석 1 (0) | 2021.12.24 |
---|---|
네 번째 과제 카카오톡 프로필 구현 그리고 반응형 웹 ( %, vw, vh, em, rem) (0) | 2021.12.23 |
세 번째 개인 과제 고블린 사냥 (0) | 2021.12.21 |
2주차 링크드리스트 (0) | 2021.12.20 |
첫 개인과제 up_and_down (0) | 2021.12.20 |