본문 바로가기

Programming/Algorithm

[Python3] 31게임!

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

3 4 5

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