본문 바로가기
파이썬

[파이썬] 숫자야구 만들기

by jackypark 2022. 7. 26.

저번에 내가 자바에서 만들었던 알고리즘을 그대로 가져왔다

자바 숫자야구: https://jackycode.tistory.com/27

코드 메커니즘은 위 링크랑 똑같다.

import random

sstrike=[0]
bball=[0]
cnt=0
def ballCount(number):
    strike=0
    ball=0
    for i in range(len(batter)):
        if batter[i] in number:
            if batter[i]==number[i]:
                strike+=1
            else:
                ball+=1
    sstrike[0]=strike
    bball[0]=ball
    print("스트라이크 존")
    print(batter)
    print(strike,"Strike")
    print(ball,"Ball~")
for r in range(1000):   
    guess=[]
    for i in range(10):
        for j in range(10):
            if not(i==j):
                for n in range(10):
                    if not(j==n or i==n):
                        guess.append(str(i)+str(j)+str(n))
    
    batter=random.sample(range(0,10),3) ## 중복없는 난수 0부터 9까지 3개 뽑기
    for i in range(len(batter)):
        batter[i]=str(batter[i])
    print(batter)
    while True:    
        n=random.randint(0,len(guess)-1)
        hitNum=guess[n]
        print(hitNum)
        ballCount(hitNum)
        removeNumber=[]
        guess.remove(hitNum) ## 뽑은 수 우선삭제


        if sstrike[0]==0 and bball[0]==0:
            for i in range(len(guess)):
                for j in range(len(hitNum)):
                    for k in range(len(hitNum)):
                        if hitNum[k] == guess[i][j]:
                            removeNumber.append(guess[i])

        elif sstrike[0]==0 and bball[0]==1:
            for i in range(len(guess)):
                for j in range(len(hitNum)):
                    if hitNum[j] == guess[i][j]:
                        removeNumber.append(guess[i])

        elif sstrike[0]==0 and bball[0]==2:
            for i in range(len(guess)):            
                if hitNum[0] != guess[i][1] or hitNum[1] != guess[i][2] :                
                    if hitNum[0] != guess[i][2] or hitNum[2] != guess[i][1] :
                        if hitNum[1] != guess[i][2] or hitNum[2] != guess[i][1] :
                            if hitNum[1] != guess[i][0] or hitNum[0] != guess[i][2] :
                                if hitNum[2] != guess[i][0] or hitNum[0] != guess[i][2] :
                                    if hitNum[2] != guess[i][0] or hitNum[1] != guess[i][2] :
                                        if hitNum[1] != guess[i][0] or hitNum[0] != guess[i][1] :
                                            if hitNum[2] != guess[i][0] or hitNum[0] != guess[i][1] :
                                                if hitNum[1] != guess[i][0] or hitNum[2] != guess[i][1] :                                                                                               
                                                    removeNumber.append(guess[i])
                                                elif hitNum[0] == guess[i][2] :
                                                    removeNumber.append(guess[i])
                                            elif hitNum[1] == guess[i][2] :
                                                removeNumber.append(guess[i])
                                        elif hitNum[2] == guess[i][2] :
                                            removeNumber.append(guess[i])
                                    elif hitNum[0] == guess[i][1] :
                                        removeNumber.append(guess[i])
                                elif hitNum[1] == guess[i][1] :
                                    removeNumber.append(guess[i])
                            elif hitNum[2] == guess[i][1] :
                                removeNumber.append(guess[i])
                        elif hitNum[0] == guess[i][0] :
                            removeNumber.append(guess[i])
                    elif hitNum[1] == guess[i][0] :
                        removeNumber.append(guess[i])
                elif hitNum[2] == guess[i][0] :
                    removeNumber.append(guess[i])

        elif sstrike[0]==0 and bball[0]==3:        
            for i in range(len(guess)):
                for j in range(len(hitNum)):
                    if hitNum[j] not in guess[i]:
                        removeNumber.append(guess[i])
        elif sstrike[0]==1 and bball[0]==0:
            for i in range(len(guess)):
                if hitNum[0] != guess[i][0]:
                    if hitNum[1] != guess[i][1]:
                        if hitNum[2] != guess[i][2]:
                            removeNumber.append(guess[i])
                        elif hitNum[0] in guess[i][:2] or hitNum[1] in guess[i][:2]:
                            removeNumber.append(guess[i])
                    elif hitNum[0] in guess[i][0] or hitNum[2] in guess[i][0]:
                        removeNumber.append(guess[i])
                    elif hitNum[0] in guess[i][2] or hitNum[2] in guess[i][2]:
                        removeNumber.append(guess[i])
                elif hitNum[1] in guess[i][1:] or hitNum[2] in guess[i][1:]:
                    removeNumber.append(guess[i])

        elif sstrike[0]==2 and bball[0]==0:
            for i in range(len(guess)):
                if hitNum[0] != guess[i][0] or hitNum[1] != guess[i][1]:
                    if hitNum[1] != guess[i][1] or hitNum[2] != guess[i][2]:
                        if hitNum[0] != guess[i][0] or hitNum[2] != guess[i][2]:
                            removeNumber.append(guess[i])
        elif sstrike[0]==3 and bball[0]==0:
            cnt+=1
            print(hitNum,"!!!삼진!!!")
            print("카운터: ",cnt)
            break    

        elif sstrike[0]==1 and bball[0]==1:
            for i in range(len(guess)):
                if hitNum[0] != guess[i][0] or hitNum[1] != guess[i][2]:
                    if hitNum[0] != guess[i][0] or hitNum[2] != guess[i][1]:
                        if hitNum[1] != guess[i][1] or hitNum[0] != guess[i][2]:
                            if hitNum[1] != guess[i][1] or hitNum[2] != guess[i][0]:
                                if hitNum[2] != guess[i][2] or hitNum[1] != guess[i][0]:
                                    if hitNum[2] != guess[i][2] or hitNum[0] != guess[i][1]:
                                        removeNumber.append(guess[i])
                                    elif hitNum[1] == guess[i][0]:
                                        removeNumber.append(guess[i])
                                elif hitNum[0] == guess[i][1]:
                                    removeNumber.append(guess[i])
                            elif hitNum[0] == guess[i][2]:
                                removeNumber.append(guess[i])
                        elif hitNum[2] == guess[i][0]:
                            removeNumber.append(guess[i])
                    elif hitNum[1] == guess[i][2]:
                        removeNumber.append(guess[i])
                elif hitNum[2] == guess[i][1]:
                    removeNumber.append(guess[i])

        elif sstrike[0]==1 and bball[0]==2:
            for i in range(len(guess)):
                if hitNum[0] not in guess[i]:
                    removeNumber.append(guess[i])
                elif hitNum[1] not in guess[i]:
                    removeNumber.append(guess[i])
                elif hitNum[2] not in guess[i]:
                    removeNumber.append(guess[i])

        cnt+=1
        for i in range(len(removeNumber)):
            num=removeNumber[i]
            if num in guess:
                guess.remove(num)


cnt=cnt//1000

print("1000회 돌릴시 찾는 평균",cnt)

 

자바 때랑 마찬가지로 1000회 반복 시 평균 5를 나오는 것을 확인했습니다.

 

끝 결과

생각보다 자바를 파이썬으로 바꾸는것이 어려웠다. 아직 파이썬의 클래스와 메서드 생성 부분을 안 배워서 그런 거 같다.

곧 배울테니 배우면 클래스와 메서드를 사용해서 바꿔 봐야겠다

 

댓글