저번에 내가 자바에서 만들었던 알고리즘을 그대로 가져왔다
자바 숫자야구: 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를 나오는 것을 확인했습니다.

생각보다 자바를 파이썬으로 바꾸는것이 어려웠다. 아직 파이썬의 클래스와 메서드 생성 부분을 안 배워서 그런 거 같다.
곧 배울테니 배우면 클래스와 메서드를 사용해서 바꿔 봐야겠다
'파이썬' 카테고리의 다른 글
| [파이썬] 22장~24장 Quiz and 심사문제 (0) | 2022.07.27 |
|---|---|
| [파이썬] 13 ~21장 Quiz and 연습문제 and 심사문제 (0) | 2022.07.27 |
| [파이썬] 로또 생성기 (0) | 2022.07.26 |
| [파이썬] for문과 while문활용 별찍기 (0) | 2022.07.26 |
| [파이썬] 시작하기 1장~ 12장 연습문제 및 심사문제 (0) | 2022.07.25 |
댓글