2016-10-28 2 views
1

재미 있고 파이썬을 배우려면 (3.5), 저는 스도쿠 해결사를 프로그래밍 중입니다. 지금은 코드에 격자를 하드 코딩하여 개발/테스트 할 수 있습니다. 이 그리드에 해당은 일련의 목록으로 텍스트를 변환합니다.

# initialise list. It generates a 9x9 grid full of zeroes 
matrix = [[0 for y in range(9)] for x in range(9)] 

# generate hard-coded board. 0 means the cell is empty 
matrix[0] = [0, 0, 3, 0, 2, 0, 6, 0, 0] 
matrix[1] = [9, 0, 0, 3, 0, 5, 0, 0, 1] 
matrix[2] = [0, 0, 1, 8, 0, 6, 4, 0, 0] 
matrix[3] = [0, 0, 8, 1, 0, 2, 9, 0, 0] 
matrix[4] = [7, 0, 0, 0, 0, 0, 0, 0, 8] 
matrix[5] = [0, 0, 6, 7, 0, 8, 2, 0, 0] 
matrix[6] = [0, 0, 2, 6, 0, 9, 5, 0, 0] 
matrix[7] = [8, 0, 0, 2, 0, 3, 0, 0, 9] 
matrix[8] = [0, 0, 5, 0, 1, 0, 3, 0, 0] 

...! 지금이 특정 보드를 해결할 수있었습니다 것을

- - 3 | - 2 - | 6 - - 
9 - - | 3 - 5 | - - 1 
- - 1 | 8 - 6 | 4 - - 
--------------------- 
- - 8 | 1 - 2 | 9 - - 
7 - - | - - 4 | 1 - 8 
- - 6 | 7 - 8 | 2 - - 
--------------------- 
- - 2 | 6 - 9 | 5 - - 
8 - - | 2 - 3 | - - 9 
- - 5 | 4 1 - | 3 - - 

(YAY :), 나는 테스트를 변경하려면 이 코드는 새로운 퍼즐과 함께 작동합니다. 대신에 하나의 숫자 하나를 변경하는, I 같은 입력 일 수있는 방법이있다 : 든

new_puzzle = " 
200080300 
060070084 
030500209 
000105408 
000000000 
402706000 
301007040 
720040060 
004010003" 

및 상기 (것과 같은 행렬로 변환하기 때문에, 예를 들어

matrix[0] = [2,0,0,0,8,0,3,0,0] 
matrix[1] = [0,6,0,0,7,0,0,8,4] 
# etc... 
+3

여러 줄 문자열 리터럴에 줄 따옴표 ":" ""를 사용하십시오. 그런 다음'splitlines()'를 사용하여 줄의 목록을 얻습니다. 그런 다음 각 문자를 각 행에서 'int'로 변환하십시오. – zvone

+0

만약 한 줄이라면 범위 (0, len (new_puzzle), n)]에있는 i에 대해 [[new_puzzle [i : i + n]의 j에 대한 j]]를 사용할 수 있습니다. 여기서 n은 셀의 수입니다 –

답변

2

new_puzzle = """ 
200080300 
... 
""" 

는 그런 다음 목록의 목록에 선을 변환하는 지능형리스트를 사용할 수 있습니다 : 당신은 여러 문자열을 사용하려면 먼저, 당신은 """ 사용해야하는

>>> [list(map(int, row)) for row in new_puzzle.strip().splitlines()] 
[[2, 0, 0, 0, 8, 0, 3, 0, 0], [0, 6, 0, 0, 7, 0, 0, 8, 4], [0, 3, 0, 5, 0, 0, 2, 0, 9], [0, 0, 0, 1, 0, 5, 4, 0, 8], [0, 0, 0, 0, 0, 0, 0, 0, 0], [4, 0, 2, 7, 0, 6, 0, 0, 0], [3, 0, 1, 0, 0, 7, 0, 4, 0], [7, 2, 0, 0, 4, 0, 0, 6, 0], [0, 0, 4, 0, 1, 0, 0, 0, 3]] 
+0

'' '''는 여러 줄 문자열에서도 작동 할 수 있지만 처리 방법에 차이가 있는지 확실하지는 않습니다. – ctfd

관련 문제