1

嗨,我无法在我的 sript 中测试非整数。我正在尝试编写一个函数,如果数独有效则返回 True,否则返回 False。数独的 2 条规则: 1) 正方形的每一列都包含从 1 到 n 的整数中的每一个恰好一次。2) 正方形的每一行包含从 1 到 n 的每个整数恰好一次。我遇到的问题是函数“incorrect4”和“incorrect5”。Incorrect4 显示 True,即使它不是整数/整数,并且不正确 5 显示错误消息:+: 'int' 和 'str' 不支持的操作数类型。我尝试了多种测试整数的方法,但不正确的“1.5”的值仍然显示为 True。此外,我寻找了一个解决方案不受支持的操作数类型错误,但无法修复它。

correct = [[1,2,3],
       [2,3,1],
       [3,1,2]]
incorrect4 = [['a','b','c'],
          ['b','c','a'],
          ['c','a','b']]

incorrect5 = [ [1, 1.5],
           [1.5, 1]]

def check_sudoku(square):
    a = 0
    result = [sum(l) for l in square]
    sum_list = []

    all(type(item)==int for item in square)
    return True

    for col in range(len(square[0])):
        sum_list.append(sum(row[col] for row in square))
        if sum_list == result: return True
    return False 

    for row in range(len(square)):
        if sum(square[a]) == sum(square[a+1]):
            a += 1
            return True
    return False

print check_sudoku(correct)
print check_sudoku(incorrect4)
print check_sudoku(incorrect5)
4

3 回答 3

1

由于数独谜题必须有 1-9 之间的整数,因此您不希望通过一些其他疯狂的整数,例如 -4294967296。因此,我认为这样的检查是合适的:

d = 3  # edge-size of your sudoku
all(n in range(1, d**2) for row in sudoku_puzzle for n in row)

Wheresudoku_puzzle可以是列表列表,但您可以考虑使用 numpy 数组。

您仍然需要再次检查以确保您的尺寸sudoku_puzzle正确。

于 2013-04-18T03:59:51.487 回答
0

您正在尝试将 sum() 应用于 int 以外的类型。

all(type(item)==int for item in square) return True

应该先到

result = [sum(l) for l in square] sum_list = []

并且对于两个嵌套的for循环,您可以维护一个标志,在每个循环中相应地将其设置为真/假,然后返回该标志,而不是在第一个循环之后立即返回一个布尔值

我也不确定你在 all 子句之后的缩进是否正确。如果没有错,程序将不会超出该行执行

于 2013-04-18T05:27:30.593 回答
-2

如果您正在寻找的只是一个浮点函数,如果浮点数是整数,它将返回 true,那么它是内置在 python 中的。就在您迭代时,请确保将所有数字转换为浮点数,甚至整数。不是很理想,但效果很好!我将它用于机器学习中的交叉验证算法

number = float(some_number)
if number.is_integer():
     #this will execute if the variable is an integer
else:
    #this will execute if the variable is a float
于 2013-04-18T04:03:20.453 回答