【问题标题】:Testing for non-integers (decimals and strings)测试非整数(小数和字符串)
【发布时间】:2013-04-18 03:49:43
【问题描述】:

您好,我在测试 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)

【问题讨论】:

  • 您是否尝试过使用isinstance(number,int),如果number 是整数,它会返回True
  • 小心,布尔值也可能返回 true
  • 这是我不知道的奇怪行为。 isinstance(number,int) and not isinstance(number, bool) 会起作用吗?
  • 另外,尝试显示堆栈跟踪,以便我们可以看到正确的错误消息及其来源。
  • 这是因为 bool 是 python 中 intsubclass。不过应该不会引起问题...

标签: python integer syntax-error


【解决方案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 的尺寸正确。

【讨论】:

    【解决方案2】:

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

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

    应该在之前

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

    对于两个嵌套的 for 循环,您可以维护一个标志,在每个循环中相应地将其设置为 true/false,然后返回标志

    ,而不是在第一个循环之后立即返回 bool 值

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您对什么感到困惑?问题是测试某个东西是否是整数......这个函数是内置在 python 中的,所以它只需要用于你正在检查的内容。
      • python内置的?我认为你生活在一个幻想世界中
      • 浮点数上有一个方法,但它不适用于字符串或其他somethings。此外,它甚至不能在像1.0 这样的整个浮点数上正常工作。最重要的是,它也不适用于int
      • 这很奇怪......我在我的交叉验证算法中运行它,它在那里工作,我没有从任何东西导入它或为它编写代码......
      • 其实你是对的,这是区分一个整数,如果它是一个浮点数。但是这里要问的问题是 False 对于 1.5,它就是!所以它确实适用于此,我将编辑我的回复。现在我正在运行一些代码,它在像 1.0 这样的浮点数上运行良好
      猜你喜欢
      • 1970-01-01
      • 2019-09-19
      • 2010-12-17
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2011-01-13
      • 2011-09-21
      相关资源
      最近更新 更多