본문 바로가기

Python

[Python] Strike 게임

내가 쓴 코드)

# 1~9까지 무작위로 세자리 수 (중복 없이) 만들기
# 맞출 때까지 무한반복
# 숫자를 맞춰보세요 : "입력"
# 같은 자리의 수가 있으면 strike, 같은 수가 다른 자리에 있으면 ball
# com = "329" , mine ="123" ==> 123 1S1B
# com = "329" , mine = "321" ==> 321 2S0B
# com = "329", mine ="329" ==> 329 맞췄습니다. 프로그램 종료
from random import random
#while
con = True

#1부터 9까지 배열 만들기
arr = [];
for i in range(1,9+1):
    arr.append(i)

#배열 섞기
for i in range(1,100+1):
    rnd = int(random()*9)
    a = arr[0]
    arr[0] = arr[rnd]
    arr[rnd] = a
    

#com 숫자 만들기
com = str(arr[0])+str(arr[1])+str(arr[2])
print(com)

while con:
    strike = 0
    ball = 0
    
    mine = input("숫자를 맞춰보세요 : ")
    if com == mine:
        print(mine,"맞췄습니다.")
        con = False
    else:
        if com[0] == mine[0]:
            strike += 1
        if com[1] == mine[1]:
            strike += 1
        if com[2] == mine[2]:
            strike += 1
            
        if com[0] == mine[1] or com[0] == mine[2]:
            ball +=1
        if com[1] == mine[0] or com[1] == mine[2]:
            ball +=1
        if com[2] == mine[0] or com[2] == mine[1]:
            ball +=1
    
        print(mine,str(strike)+"S"+str(ball)+"B")

 

선생님 코드(메서드 사용)

from random import random


#Strike 구하는 메서드
def getS(com,mine):
    ret = 0
    c1 = com[0]
    c2 = com[1]
    c3 = com[2]
    
    m1 = mine[0]
    m2 = mine[1]
    m3 = mine[2]
    
    if c1 == m1:
        ret += 1
    if c2 == m2:
        ret += 1
    if c3 ==m3:
        ret += 1
    
    return ret


#Ball 구하는 메서드
def getB(com,mine):
    ret = 0
    c1 = com[0]
    c2 = com[1]
    c3 = com[2]
    
    m1 = mine[0]
    m2 = mine[1]
    m3 = mine[2]
    
    if c1 == m2 or c1 == m3:
        ret += 1
    if c2 == m1 or c2 == m3:
        ret += 1
    if c3 == m1 or c3 == m2:
        ret += 1
    
    return ret


# 컴퓨터 값 셋팅 메서드
def ranC():
    #1부터 9까지 배열 만들기
    arr = [];
    for i in range(1,9+1):
        arr.append(i)

        #배열 섞기
    for i in range(1,100+1):
        rnd = int(random()*9)
        a = arr[0]
        arr[0] = arr[rnd]
        arr[rnd] = a
    

    #com 숫자 만들기
    com = str(arr[0])+str(arr[1])+str(arr[2])
    return com


com = ranC()
#while 변수
w = True
while w:
    
    # 내 입력값 받기
    mine = input("숫자를 맞춰보세요 : ")
    print(com)
    # 내 입력값으로 Strike, Ball 값 받기
    s = getS(com,mine)
    b = getB(com,mine)
    
    
    # 결과 출력
    if s == 3:
        print(mine,"정답입니다")
        w = False
    else:
        print(mine,str(s)+"S"+str(b)+"B")

메서드를 만들어 쓰는게 아무래도 더 깔끔한거 같다.

'Python' 카테고리의 다른 글

[QT] 버튼 클릭 시 감소  (0) 2023.06.28
[Python] 홀 짝 게임  (0) 2023.06.28
[Python] 가위 바위 보 게임  (0) 2023.06.28
[Python] 로또 프로그램 만들기  (0) 2023.06.28
[Python] 배열  (0) 2023.06.28