앞으로 갑자기 생각난 알고리즘을 여기에다가 끄적여 볼까 한다. 갑자기 생각난 프로그램이니 조금 부실하여도 이해해주길 바란다
"숫자 야구"무엇인가 굉장히 엄청날 것 같지만 쉽게 생각하면 숫자로 행맨 하는 놀이이다. 둘이서 하고 서로가 1~10자리 숫자를 생각한 후(보통은 3,4) 차례로 상대의 숫자를 맞춘다. 규칙은 아래와 같다.
● 사용되는 숫자는 0에서 9까지이며 중복은 허용치 않는다.(맨 처음숫자가 0이어도 상관없다.)
● 숫자는 맞지만 위치가 틀리면 볼
● 숫자와 위치가 둘다 맞으면 스트라이크
● 숫자와 위치가 둘다 틀리면 아웃
● 무슨 숫자가 볼이고 스트라이크인지는 알려주지 않는다
단순해 보이지만 랜덤, 중복체크, 숫자배열 등등 여러개가 쓰인다.
알고리즘을 짜본다면(컴퓨터와 하니 내가 일방적으로 맞출 수 밖에없다. 후에 1 vs computer 추가예정)
몇자리수로 할건지 n에 입력 받는다.
중복되지않게 n자리 guess 리스트를 만든다.
사용자의 입력을 usr_guess에 입력받는다.
하나씩 입력받은게 guess와 자리까지 같다면 strike에 1추가
guess안에 있다면 ball에 1추가
usr_guess==guess 또는 strike==n이라면 라면 게임끝내기
from random import randint
def unique(x): #중복입력방지를 위한 함수
for i in x:
if(x.count(i)>=2):
return False
return True
while(1):
count=0
check=True
n=0
try: n=int(input("몇자리수??(1~10)"))
except ValueError:
print("숫자!!!")
check=False #숫자가 아니면 처음으로
if(n>10 and check):
print("0~10까지 정수만!!")
elif(n<=10 and check):
num=['0','1','2','3','4','5','6','7','8','9']
guess=[]
for I in range(n):
temp=randint(0,len(num)-1)
guess.append(num[temp])
del(num[temp]) #guess 설정
print("띄어쓰기 하지말고! 0~9까지 숫자를 중복안되게 조합해서 불러봐")
while(1):
count+=1
usr_guess=str(input("\n음..이건가?"))
check=True
try: temp=int(usr_guess)
except ValueError:
print("\n숫자!!!")
check=False
if(len(usr_guess)!=n and check): print(n,"자리 숫자야!")
elif(not unique(usr_guess)): print("\n중복은 허용 안돼")
elif(check): #볼,스트라이크 출력구문
strike=0
ball=0
for k in range(n):
if (usr_guess[k]==guess[k]): strike+=1
elif (usr_guess[k] in guess): ball+=1
if(strike==n): #정답
print("\n맞았어",count,"번 만에 맞췄네") #맞출 시
if(count==1): print("와우 1/"+str(10**n)+"의 확률이야")
q=input("\n한번 더할래?(N/Y): ").lower()
if(q=='n'): exit()
elif(q=='y'): break
else:
print("\n똑바로 입력 안한자에겐 기횐 없다.")
exit()
else:
print("\n",strike," 스트라이크,",ball," 볼")
<실행화면>
'Programming > Algorithm' 카테고리의 다른 글
[Python3] 올바른 괄호 판단하기1 (0) | 2016.12.06 |
---|---|
[Python3] 디지털 숫자 찍기 (0) | 2016.12.04 |
[Python3] 바퀴벌레 문제 (2) | 2016.12.02 |
[Python3] 올바른 괄호 (2) | 2016.11.17 |
[Python3] 집합, 자연수 분할 (0) | 2016.11.09 |