Фотография автора

Привет, меня зовут Влад.

Здесь я пишу на темы в которых пытаюсь разобраться: веб-дизайне, программировании, веб-аналитике и рекламе.

Может о чем-то еще.

Разбор задачи «Descending Order»

Условие:
Нужно написать функцию, которая может принимать любое неотрицательное целое число в качестве аргумента и возвращать его с цифрами в порядке убывания.
По сути, переставить цифры, чтобы получить максимально возможное число.

Пример:

descending_order(123789) #returns 987321
descending_order(764209) #returns 976420

Решение:

def descending_order(num):
    number = str(num)
    number = list(number)
    number.sort(reverse=True)
    return int("".join(number))
  1. Преобразуем число в строку, чтобы можно было разбить на отдельные символы.
  2. С помощью list разбиваем строку на отдельные цифры, если быть точнее на символы 🙂
  3. Сортируем массив.
  4. Схлопываем значения в отсортированном массиве и возвращаем целочисленное значение.

Как всегда есть более лаконичные решения:

def descending_order(num):
    return int("".join(sorted(str(num), reverse=True)))

По сути всё аналогично первому решению за исключением того, что вместо sort используется sorted.
Sorted в данном случае возвращает отсортированный список и нам не нужно отдельно преобразовывать строку к списку.
Порядок выполнения такой:

  1. Преобразовываем внутри sorted целочисленное значение к строке, сортируем в обратном порядке.
  2. Склеиваем строку с помощью метода .join().
  3. Преобразовываем строку обратно к целочисленному значению.
  4. Возвращаем результат.