1부터 31까지 순서대로 번갈아가며 1개 이상 3개 이하의 숫자를 말한다.
31을 말하면 게임에서 패배한다.
ex) 1, 2, 3 / 4, 5 / 6, 7, 8 / .... / 28, 29, 30 / 31(패배)
한번쯤은 친구들과 이 게임을 해본적이 있을 것이다. 간단한 게임이지만 꽤나 두뇌를 쓰기 때문에 재밌게 할 수 있다.
알고리즘은 생각보다 바로 떠오르지 않는다. 컴퓨터가 31을 굳이 안 말해도 되지만 말해서 자폭하는 경우와 유저가 잘못 입력하는 경우들을 다 따져줘야 한다.
from random import randint
import sys
num = []
for i in range(1, 34): # 유저가 31과 그 이후 까지 입력할까봐 넉넉히 잡았다.
num.append(i)
def com_num(): # 컴퓨터 차례
com_range = randint(1, 3)
while(com_range > 0):
if(num[0] == 31): # 컴퓨터가 31을 실수로 불러 자폭대비
break
print(num[0], end=' ')
del(num[0])
com_range -= 1
print()
while(1): # 순서 설정
order = input('First or Last? (F/L): ')
if(order not in ['F', 'L', 'f', 'l']):
print("Wrong input")
continue
else:
break
if(order in ['L', 'l']): # 나중에 한다면 컴퓨터가 먼저 시작
com_num()
while(1):
while(1):
usr_num = input().split()
if(not (0 < len(usr_num) < 4)): # 갯수방지
print("1~3 nums!")
continue
check = True
for i in range(len(usr_num)):
try:
if(int(usr_num[i]) != num[i]): # 건너 뛰면서 입력 방지
print("Wront Input!")
check = False
break
except ValueError: # 문자방지
print("Numbers!")
check = False
break
if(check):
break
for i in range(len(usr_num)):
if(int(usr_num[i]) == 31): # 패배
print("You Loose")
sys.exit()
del(num[0])
if(num == [31, 32, 33]): # 컴퓨터 패배
print("I loose!!")
break
com_num()
성격상 유저가 잘못 입력하는 경우를 철저히 배재하는 방식이 좋아서 프로그램이 다소 길어졌다. 하지만, 이런 방식으로 프로그래밍하는 습관을 길러두면 나중에 생각지도 못한 버그를 많이 줄일 수 있다.
초록색이 유저의 입력이다.
First or Last? (F/L): ㄹ
Wrong input
First or Last? (F/L): f
1
2
3 4 5
6
sd
Numbers!
7 8 9 10
1~3 nums!
10
Wront Input!
7 8 9
10 11 12
13
14
15 16
17 18
19 20
21 22 23
24
25
26 27 28
29
30
I loose!!
Process finished with exit code 0
'Programming > Algorithm' 카테고리의 다른 글
[Python3] 이진수 게임! (4) | 2017.03.26 |
---|---|
[Python3] 31게임! 필승전략 (1) | 2017.03.22 |
[Python3] 제곱해서 같은 수 - 2 (0) | 2017.03.12 |
[Python3] 제곱해서 같은 수 - 1 (0) | 2017.03.11 |
[Python3] 피보나치 수 (3) | 2017.03.10 |