В предложенном вами ответе есть пара ошибок.
- Оператор
else
и оба оператора return
должны иметь меньший отступ.
- Ваши вопросы тестировщика показывают, что вы должны считать цифры для неотрицательных целых чисел, а не только положительных (т.е. ваш алгоритм должен работать с 0).
Вот моя предложенная альтернатива, основанная на ваших критериях и критериях задачи.
def order_size(order):
# Fill in your code here
if order >= 0:
size = 0
while order > 0:
size += 1
order = order // 10
return size
else:
return 0
Заметь
Используя инклюзивное неравенство в условии if
, я разрешаю 0 входить в цикл while, как и любое другое неотрицательное однозначное число.
Нажимая назад первый оператор return
, он выполняет после цикла while. Таким образом, после подсчета заказа в переменной size он возвращается.
При нажатии else:
назад он выполняется в том случае, если условие if
не выполняется (т.е. когда числа, переданные в order_size (n), отрицательны).
Если отодвинуть вторую return
назад, она синтаксически верна и содержится в блоке else
, как и должно быть.
Теперь, когда об этом позаботились, позвольте мне обратиться к следующему:
Но я не получаю порцию заказа // 10.
Начиная с Python 3, //
является разделением этажа em> (также известное как целочисленное деление) двоичная операция.
Он эффективно выполняет стандартное деление, а затем округляет вниз (в сторону отрицательной бесконечности) до ближайшего целого числа.
Вот несколько примеров, которые могут вам помочь. Обратите особое внимание на последнее.
10 // 2 # Returns 5 since 10/2 = 5, rounded down is 5
2 // 2 # Returns 1 since 2/2 = 1, rounded down is 1
11 // 2 # Returns 5 since 11/2 = 5.5, rounded down is 5
4 // 10 # Returns 0 since 4/10 = 0.4, rounded down is 0
(-4) // 10 # Returns -1 since (-4)/10 = -0.4, rounded down is -1
Для неотрицательного числителя n n // d
можно рассматривать как количество раз, когда d вписывается в n целое.
Таким образом, для такого числа, как n = 1042, n // 10
даст вам, сколько целых умноженных на 10 умещается в 1042.
Это 104 (поскольку 1042/10 = 104,2, и округляя в меньшую сторону, получаем 104). Обратите внимание, как мы эффективно отбили цифру?
Давайте посмотрим на ваш цикл while
.
while order > 0:
size += 1
order = order // 10
Каждый раз, когда цифра «сбивается» order, счетчик size увеличивается, таким образом подсчитывая, сколько цифр вы можете сбить, прежде чем достигнете завершающего шага.
Прекращение происходит при выбивании последней (единственной) цифры. Например, вы уменьшили order до 1 (с 1042), тогда 1 // 10
вернет 0.
Итак, как только все цифры будут "выбиты" и подсчитаны, ваш заказ будет иметь значение 0. Цикл while завершится, и будет возвращен ваш счетчик size .
Надеюсь это поможет!
Заявление об ограничении ответственности: возможно, это не то, что вы хотите услышать, но многие университеты считают копирование кода из Интернета и выдачу его за свой собственный плагиатом.
person
Mathmagician
schedule
11.10.2016