测试非整数(小数和字符串)

时间:2013-04-18 03:49:44

标签: python integer syntax-error

嗨,我在我的sript测试非整数时遇到了麻烦。我正在尝试编写一个函数,如果数独有效则返回True,否则返回False。数独的2规则:1)正方形的每一列包含从1到n的整数中的每一个恰好一次。 2)正方形的每一行包含从1到n的整数中的每一个恰好一次。我遇到的问题是函数“incorrect4”和“incorrect5”。 Incorrect4显示为True,即使它不是整数/整数且不正确5显示错误消息:+:'int'和'str'的不支持的操作数类型。我已经尝试了多种测试整数的方法,但不正确4中的“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)

3 个答案:

答案 0 :(得分: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)

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

您仍需要进行其他检查,以确保sudoku_puzzle的尺寸正确无误。

答案 1 :(得分:0)

您正在尝试对除int之外的类型应用sum()。

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

应该在

之前

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

并且对于两个嵌套for循环,而不是在第一个循环后不久返回bool值,你可以保持一个标志,在每个循环中相应地设置为true / false,然后返回标志

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

答案 2 :(得分:-2)

如果你正在寻找的是一个浮点函数,如果float是一个整数,它将返回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