Перенести нули в конец: провалить тест в CodeWars? - PullRequest
1 голос
/ 07 мая 2020

Проблема

Ссылка на проблему: https://www.codewars.com/kata/52597aa56021e91c93000cb0/train/python

Напишите алгоритм, который берет массив и перемещает все нули в конец, сохраняя порядок других элементов.

move_zeros([false,1,0,1,2,0,1,3,"a"]) # returns[false,1,1,2,1,3,"a",0,0]

Мой код:

def move_zeros(array):
    list = []
    list2 = []
    for n in array:
        if n is 0:
            list2.append(n)
        else:
            list.append(n)
    return list + list2

Примеры тестов:

Test.describe("Basic tests")
Test.assert_equals(move_zeros([1,2,0,1,0,1,0,3,0,1]),[ 1, 2, 1, 1, 3, 1, 0, 0, 0, 0 ])
Test.assert_equals(move_zeros([9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9]),[9,9,1,2,1,1,3,1,9,9,0,0,0,0,0,0,0,0,0,0])
Test.assert_equals(move_zeros(["a",0,0,"b","c","d",0,1,0,1,0,3,0,1,9,0,0,0,0,9]),["a","b","c","d",1,1,3,1,9,9,0,0,0,0,0,0,0,0,0,0])
Test.assert_equals(move_zeros(["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9]),["a","b",None,"c","d",1,False,1,3,[],1,9,{},9,0,0,0,0,0,0,0,0,0,0])
Test.assert_equals(move_zeros([0,1,None,2,False,1,0]),[1,None,2,False,1,0,0])
Test.assert_equals(move_zeros(["a","b"]),["a","b"])
Test.assert_equals(move_zeros(["a"]),["a"])
Test.assert_equals(move_zeros([0,0]),[0,0])
Test.assert_equals(move_zeros([0]),[0])
Test.assert_equals(move_zeros([False]),[False])
Test.assert_equals(move_zeros([]),[])

Мой вывод:

  • Тест пройден
  • [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]
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден
  • Тест пройден

Мой вопрос:

Я считаю, что это не удается, потому что 0,0 не равно 0. Но я изо всех сил пытаюсь понять, как я могу это написать. Я начинаю кодировать, поэтому мой код не выглядит как pythoni c, но я думаю, что это то, что я должен использовать

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

Используйте:

n == 0 and n is not False

Согласно https://docs.python.org/3/library/stdtypes.html

Существует три различных типа numeri c: целые числа, числа с плавающей запятой, и комплексные числа. Кроме того, логические значения являются подтипом целых чисел

и

Объекты разных типов, кроме разных типов numeri c, никогда не сравнивайте равные

0 голосов
/ 07 мая 2020

Вы можете использовать if n is 0 or n == 0.0 and type(n) == float. (или type(0.0) вместо float)

Я не знаю, почему if n is 0 or n is 0.0 не работает. Если у кого-то есть, прокомментируйте.

0 голосов
/ 07 мая 2020

Просто используйте == вместо is. 0 is 0.0 возвращает False, но 0 == 0.0 возвращает True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...