0

嘿伙计们,所以我几乎解决了这个 kata,但我的代码一直未能通过这个测试。有任何想法吗?

def move_zeros(array):
    n = len(array)
    count = 0
    
    for i in range(n):
        if array[i] is not 0:    
            if type(array[i]) != int or type(array[i]) != float:
                array[count] = array[i]
                count += 1
            else:
                array[count] = array[i]
                count += 1
            
    while count < n:
        array[count] = 0
        count += 1
    return array

这是失败的测试:

[9, 0.0, 9, 1, 2, 1, 1, 0.0, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0] 应该相等[9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我假设它的浮点值将其丢弃,因此我尝试使用第二个 if 语句来解释它,但无济于事。

4

2 回答 2

1

深入研究为什么由于使用而这不起作用是:

is检查对象的字面意思是指同一个对象。在 python 中,所有数字都是对象,但 for 的int对象与 for的对象0不同。float0.0

在“引擎盖”下,这些对象通过定义适当的方法来允许ints 和s 之间的相等性,该方法最终在您调用时使用。float__eq__0 == 0.0

于 2020-07-07T14:45:09.357 回答
1

is not比较数字时不要使用。这不是预期的用途。而是使用==比较运算符。

isis not或用于比较实际对象,而不是文字。

于 2020-07-07T14:36:42.247 回答