嘿,伙计们,我几乎解决了这个卡塔,但是我的代码一直没有通过这个测试。 有什么想法吗?
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] should equal [9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我假设它是浮点值,所以我尝试用第二个if语句来解释它,但是没有用。
在比较数字时不要使用is not
。 这不是预期的用法。 而是使用==
比较运算符。
是
而不是
或用于比较实际对象,而不是文字。
更深入地探讨为什么使用IS无法实现此功能:
是
检查对象是否确实引用了同一个对象。 在python中,所有数字都是对象,但0
的int
对象不同于0.0
的float
对象。
在“hood”下,通过定义适当的__eq_
方法,这些对象允许int
s和float
s之间的相等性,当您调用0==0.0
时,最终将使用该方法。