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

Python 测试非整数(小数和字符串),python,integer,syntax-error,Python,Integer,Syntax Error,嗨,我在测试sript中的非整数时遇到问题。我试图编写一个函数,如果数独是有效的,则返回True;如果不是,则返回False。数独游戏的2条规则:1)方格的每一列包含从1到n的每一个整数,精确一次。2) 正方形的每一行包含从1到n的每一个整数,精确一次。我遇到的问题是函数“incorrect4”和“incorrect5”。Incorrect4显示为True,即使它不是整数/整数;incorrect5显示错误消息:不支持+:“int”和“str”的操作数类型。我尝试了多种测试整数的方法,但inco

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

由于数独游戏中的整数必须介于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)
<> >代码> SudoKuiGuangs可以是列表列表,但是可以考虑使用NUMPY数组。
您仍然需要再次检查以确保您的
数独游戏的尺寸正确

如果您要查找的只是一个浮点函数,如果浮点是整数,则该函数将返回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
您正在尝试对int以外的类型应用sum()

all(类型(项目)=正方形项目的int)
返回真值

你应该先来

result=[l的平方和]
总和列表=[]

对于这两个嵌套for循环,您可以维护一个标志,在每个循环中相应地将其设置为true/false,然后返回标志,而不是在第一个循环之后立即返回bool值


我也不确定您在all子句之后的缩进是否正确。如果我没有错,程序就不会执行到那一行之外。

您是否尝试过使用
isinstance(number,int)
如果
number
是整数,它将返回
True
?请注意,bools也可能返回True这是我不知道的奇怪行为。将
isinstance(number,int)而不是isinstance(number,bool)
函数吗?另外,尝试显示堆栈跟踪,以便我们可以看到正确的错误消息及其来源。这是因为bool是python中
int
子类。但不应该引起问题…你觉得什么让人困惑?问题是测试某个东西是否是整数…这个函数内置在python中,所以只需要在您正在检查的内容上使用它。它内置在python中?我认为你生活在一个幻想的世界里,有一个浮点数上的方法,但它不适用于字符串或其他
东西。此外,它甚至不能在像
1.0
这样的整体浮动上正常工作。最重要的是,它对
int
也不起作用!这很奇怪…我在交叉验证算法中运行它,它在那里工作,我没有从任何东西中导入它,也没有为它编写代码…事实上,你是对的,这是为了区分一个整数,如果它是浮点。但是这里提出的问题是1.5的错误,事实就是如此!所以它确实适用于这里,我将编辑我的回答。现在我正在运行一些代码,它在1.0之类的浮动上运行良好