0

コードは次のとおりです。

def row_check(table):
    for ealst in table:
            first = [ealst[0]]
            for each in ealst[1:]:
                    if each not in first:
                            first.append(each)
                    else:
                            return False
    return True

def col_check(table):
    col = []
    totalcol = []
    count = 0
    for rows in table:
            for columns in range(len(table)):
                    col.append(table[int(columns)][count])
            count += 1
            totalcol.append(col)
            col = []
    return totalcol

def check_sudoku(table):
    if row_check(table) and row_check(col_check(table)):
            return True
    return False

if __name__ == '__main__':
    table = [[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]
    check_sudoku(table)

これは値 True を返しません。ここで、コードの実行後に関数を手動で呼び出すと、期待値が返されます。

>>> table
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> check_sudoku(table)
True

同じ動作を示す最小限の例を次に示します。

def check_sudoku(table):
    return True

if __name__ == '__main__':
    table = [[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]
    check_sudoku(table)

なぜこれが起こっているのですか?また、これを防ぐにはどうすればよいですか?つまり、呼び出されたときに True を返すにはどうすればよいですか?

4

1 に答える 1

10
if __name__ == '__main__':
    table = [[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]]
    print check_sudoku(table) #you need to actually print stuff when running in a script 

シェルにいるときにのみ戻り値を出力します。スクリプトを実行しているときは、印刷したいものを実際に印刷する必要があります...

于 2013-08-21T17:59:05.780 に答える