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 |
Tags
- kpt회고
- 준태튜터님
- 장고기초지식
- 장고
- Python
- 당우
- 팀스파르타
- 개인과제
- django
- KPT
- 패스트캠퍼스온라인
- 스파르타코딩클럽
- ai웹개발
- 내일배움캠프
- 당우의모험
- 파이썬문법
- 벌꺼야
- 웹만들기
- 웹개발종합반
- 전작가
- 유화제작
- 왕초보코딩
- 코딩
- 파이썬
- 카카오톡클론
- 9to9
- 스파르타코딩
- 패스트캠퍼스
- 리콰이어먼츠 설정
- 스파코
Archives
- Today
- Total
당우 일기장
2. 개인과제 ) 파이썬 베스킨라빈스31 게임 만들기 (ai) 본문
4의 배수를이용하여 컴퓨터가 무조건이기는 베스킨라빈스 31 게임을 만들어보자
[간단설명]
앞서 본 게임과 규칙은 동일하지만, 이번에는 플레이어가 어떤 식으로 숫자를 부르든, 컴퓨터는 항상 자신이 이기도록 나름의 방식의 가지고 숫자를 부릅니다. (그 방식이 무엇인지는 검색을 해보아도 좋고, 직접 생각해보셔도 좋습니다. *'항상'이라고 명시했지만, 딱 한 가지 경우에는 컴퓨터가 질 수도 있습니다.)
[상세설명]
- 컴퓨터가 먼저 숫자를 말할지, 플레이어가 먼저 숫자를 말할지는 랜덤으로 정한다.
- 기존의 게임과 마찬가지로 1부터 순서대로 연속된 숫자를 말하되, 플레이어는 input 함수를 통해서 부르고 싶은 숫자까지 이어서 말한다. 컴퓨터는 나름의 방식을 가지고 숫자를 말한다.
- 2번 과정을 31을 말하는 사람이 나올 때까지 반복한다. (즉, 2번을 for문 혹은 while문으로 작성할 것. 단, 컴퓨터와 플레이어 모두 31을 초과해서 숫자를 부를 수는 없다.)
- 31을 말하는 사람이 컴퓨터라면 '플레이어 승'을, 31을 말하는 사람이 플레이어라면 '컴퓨터 승'을 출력한다. (단, 컴퓨터는 자신이 항상 이기도록 나름의 방식을 가지고 숫자를 부르기 때문에, 딱 한 가지 경우를 제외하고는 항상 컴퓨터가 이길 수 밖에 없을 것임에 유의)
- 30을 컴퓨터가 무조건 부를수있게 하는 것
- 2, 6, 10, 14, 18, 22, 26, 30 하나만 컴퓨터가 부르기 시작해도 이어서 그 다음을 부를 수 있기에 무조건 승리
- 위 숫자들은 4로 나누면 나머지가 2인 숫자 -> 즉, +2 혹은 -2를 한 뒤에 4로 나누면 무조건 나머지가 0인 숫자들
from random import randrange
the_last_number = 0
# 3. 컴퓨터 혹은 플레이어는 앞 사람이 부른 숫자에 이어서, 1개~3개까지의 연속된 숫자를 말한다.
def computer_pick(the_last_number):
if (the_last_number + 3) % 4 == 0:
c = 1 # 플레이어가 1까지 불렀다면 컴퓨터는 2까지만 부르면 됨 -> 즉, 1개만 더 부르면됨
elif (the_last_number + 4) % 4 == 0:
c = 2 # 플레이어가 4까지 불렀다면 컴퓨터는 6까지 부르면 됨 -> 즉, 2개만 더 부르면됨
elif (the_last_number + 5) % 4 == 0:
c = 3
else:
c = randrange(1, 4)
# 예외처리 - 31 초과는 부를 수 없고, 31 초과를 부르려고 한다면 그냥 컴퓨터가 31까지 부르려 한다고 생각
if the_last_number + c > 31:
c = 31 - the_last_number
for i in range(1, 1+c):
print('컴퓨터: ', the_last_number + i)
return the_last_number + c
def player_pick(the_last_number):
p = int(input())
# 31 초과는 부를 수 없음
# 해당 예외처리는 플레이어가 숫자를 입력한다는 전제하에 작성된 것이고, 정확한 예외처리는 try, except 를 사용하는 것이 맞습니다!
while (p not in [1, 2, 3]) or (the_last_number + p > 31):
print('다시 입력하세요!')
p = int(input())
for i in range(1, 1+p):
print('플레이어: ', the_last_number + i)
return the_last_number + p
# 1. 컴퓨터가 먼저 숫자를 말할지, 플레이어가 먼저 숫자를 말할지는 랜덤으로 정한다.
whos_first = randrange(0, 2)
# 2. 컴퓨터 혹은 플레이어는 1 혹은 1, 2 혹은 1, 2, 3을 말하면서 게임을 시작한다. (단, 컴퓨터가 숫자를 1개 부를지, 2개 부를지, 3개 부를지는 random 패키지를 이용해서 랜덤으로 정한다. 플레이어는 input 함수를 통해서 부르고 싶은 숫자까지 이어서 말한다.)
# 컴퓨터가 먼저 할 경우
if whos_first == 1:
the_last_number = computer_pick(the_last_number)
# 4. 2~3번을 31을 말하는 사람이 나올 때까지 반복한다. (즉, 2~3번을 while문으로 작성할 것. 단, 컴퓨터와 플레이어 모두 31을 초과해서 숫자를 부를 수는 없다.)
# 5. 31을 말하는 사람이 컴퓨터라면 '플레이어 승'을, 31을 말하는 사람이 플레이어라면 '컴퓨터 승'을 출력한다.
while True:
the_last_number = player_pick(the_last_number)
if the_last_number == 31:
print('컴퓨터 승!')
break
the_last_number = computer_pick(the_last_number)
if the_last_number == 31:
print('플레이어 승!')
break
'내일배움캠프' 카테고리의 다른 글
html / css 를 이용한 카카오톡 클론코딩 (0) | 2021.12.23 |
---|---|
클래스 연습문제 (0) | 2021.12.23 |
2.개인과제 )파이썬 베스킨라빈스31 게임 만들기 (0) | 2021.12.21 |
1.개인과제 )파이썬 업다운게임 만들기 2 (ai 버전) (0) | 2021.12.21 |
1.개인과제 )파이썬 업다운게임 만들기 (0) | 2021.12.21 |