2014-11-19 5 views
0
import numpy as np  
def data_verify(source): 
     rows = [x.strip().split(' ') for x in open(source)] 
     columns = zip(*rows) 
     blocks = np.array(rows).reshape((3,3,3,3)).transpose((0,2,1,3)).reshape((9,9)) 
      #check iff, see further 
       return rows, columns, blocks 
      else: 
       return False 

Получил судоку сетки в формате TXT, как, например:Если и только если все указанные условия

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

Функция собирает все необходимые данные и возвращает соответствующие строки, столбцы и блоки тогда и только тогда длина строк - это то же самое, что и столбцы »(получил несколько других функций, которые определяют, является ли головоломка законной). Я решил, что достаточно сравнить первую строку со всеми столбцами (или наоборот, не имеет значения). Как я могу создать чек, который идет что-то вроде:

for i in range(len(rows)): 
    if len(row[0]) == len(column[i]): 
     #do something only if all of the lengths check out 

ответ

3

Использование all:

if all(len(row[0]) == len(column[i]) for i in range(len(rows))): 
    #do something only if all of the lengths check out 
+0

Спасибо, знал, что это было что-то просто, слишком просто :(Я чувствую себя так глупо: D –

+0

Обратите внимание, что если это 'np.array' вы тестируете за то, квадрат, ты мог просто используйте 'len (set (a.shape)) == 1'. –

0

Вы можете запустить проверку в цикле и установить флаг, если есть какое-то несоответствие, этот пример проверяет все строки со всеми столбцами:

match = True 
for r in row: 
    for c in column: 
     if len(c) != len(r): 
      match = False 

# Only continue if match == True