2017-11-16 12 views
0

정확하게이 문제를 설명하는 방법이 명확하지 않으므로 제목이 불충분 한 경우 사과드립니다.Tick tack toe : 아무 이유없이 다른 컨텍스트에서 다르게 표시되는 파이썬 숫자

2 차원 어레이 (목록의 목록)에 모든 틱 - 뾰족한 발가락 보드 (0은 공백, 1은 X, 2는 O)를 넣을 코드 조각을 만들려고합니다. 이 작업을 성공적으로 수행했습니다.

import math 

boxes = [] 

for m in range (0, 19683): 
    boxes.append([m%3, int(math.floor((m%9)/3))]) 

print(boxes) 

그리고 작동합니다.

boxes = [] 

for m in range (0, 19683): 
    boxes.append([]) 

    for s in range (0,9): 
     boxes[m].append(int(math.floor((m%(3**(m+1)))/(3**m)))) 

print(boxes) 

을하고 그냥 나에게 제로의 큰 배열을했다 :하지만 그 대신 다음 7 개 목록 항목을 입력, 나는 그렇게처럼 반복하기 쉬울 것이라고 생각! iteration을 iteration으로 바꾸는 것이 왜 그렇게했는지 나는 모른다. 나는 **와 pow() 둘 다 시도했다. 아무도 그 문제가 뭔지 아나요?

답변

0

코드를 보면, 당신은 의미가 있었다 두 번째 예에서 생각 :

boxes = list(product([0, 1, 2], repeat=9)) 
0

은 이제 살펴 보자 또한

boxes[m].append(int(math.floor((m%(3**(s+1)))/(3**s)))) 

, 당신은 결과의 동일한 종류를 달성하기 위해 itertools.product()을 활용할 수 있습니다 그 내부 표현에서 :

math.floor(m%(3**(m+1)))/(3**m) 

분자는 단순히입니다.: 모듈 율 3^(m+1)을 사용하면 m보다 커집니다. 다음 단계는 m/(3**m) - 정수로 취해집니다.이 값은 0입니다.

요약하면 대수가 꺼져 있습니다.

원하는 출력을 얻으려면 itertools.product을 사용하는 것이 좋습니다.