Задать вопрос
@booogabooo

Почему код не проходит тест?

Прохожу задачки на codewars.
Сейчас попалась вот такая:
"Create a function that returns the lowest product of 4 consecutive numbers in a given string of numbers.
This should only work is the number has 4 digits of more. If not, return "Number is too small"."

Написал код:
def lowest_product(input):
    list = []
    result = 1
    for i in range(len(input)):
        list.append(input[i])
    list.sort()
    if len(list) > 4:
        for i in range(4):
            result *= int(list[i])
        return result
    else:
        return "Number is too small"


Есть тесты:
Test.assert_equals(lowest_product("123456789"),24); 
Test.assert_equals(lowest_product("2345611117899"),1);
Test.assert_equals(lowest_product("2305611117899"),0);
Test.assert_equals(lowest_product("333"),"Number is too small");
Test.assert_equals(lowest_product("1234111"),4); // Numbers should be consecutives: 1 should equal 4


Не проходит последний тест. В чем проблема? Что неверно то?
Python только учу, так что еще и прошу оценить качество кода (знаю, что можно через lambda)
  • Вопрос задан
  • 496 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Tark
@Tark
Pyramid'альный мир
Вам нужно найти наименьшее произведение четырёх последовательных чисел в строке. Отсортировать - это хитрый ход, но с сортировкой последний тест вернёт 1, а должен вернуть 4.

Что до самого кода, то вместо перебора с range можно написать так:

list = []
result = 1
for i in input:
    list.append(i)

или по-взрослому
result = 1
list = [i for i in input]


Имейте в виду, что list - это зарезервированное слово, лучше бы подобрать другое название переменной.
Кроме того, проверять соответствие параметров некоторому условию стоит до каких-либо вычислений, не стоит зря нагружать работой машину.

Задачу, наверное, лучше всего решить в лоб: перебирать строку от нулевого элемента до длины строки минус четыре (или пять?), брать по четыре цифры за раз, результат загонять в список, на выходе вернуть наименьшее значение списка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы