(эту задачу надо сдавать в EJudge, но некоторые свойства решения там пока проверить нельзя) Написать:
функцию defkey(element: Comparable) -> Comparable, которая вычисляет значение ключа сортировки по следующему принципу:
Если element имеет длину, то ключ — это длина
Иначе ключ — это сам element (это допустимо в силу его типа)
функцию strictsort(seq: Sortable, key: Callable[[Comparable], Comparable] = defkey) -> Sortable:, которая сортирует элементы изменяемой последовательности (в самой последовательности) и возвращает эту последовательность
Должно быть определено два дополнительных типа:
Comparable — тип, в котором есть операция сравнения (для простоты — на меньше)
Sortable — изменяемая индексируемая последовательность элементов типа Comparable
В результате приведённый пример должен проходить mypy --strict, а любая закомментированная строка из примера — вызывать ошибку проверки/компиляции (строго до runtime).
1 c: Sortable = [6, 1, 4, 2, 7, 2, 8, 3]
2 print(*strictsort(c))
3 print(*strictsort([6., 1., 4., 2., 7., 2., 8., 3.]))
4 print(*strictsort(["234", "sdf23452345234gg", "45645674567", "ASDASD"]))
5 print(*strictsort([(1, 2, 4, 9), (2, 7, 4, 6, 8), (1,), (8, 9, 23), (7, 2, 1)]))
6 print(defkey(9), defkey("999"))
7 # c: Sortable = [7j, 2j, 3j]
8 # defkey(iter("123"))
9 # print(*strictsort({1: 2, 3: 4}))
Понадобится изрядное число абстрактных типов из collections.abc и typing
1 2 2 3 4 6 7 8 1.0 2.0 2.0 3.0 4.0 6.0 7.0 8.0 234 ASDASD 45645674567 sdf23452345234gg (1,) (8, 9, 23) (7, 2, 1) (1, 2, 4, 9) (2, 7, 4, 6, 8) 9 3
(нажмите «Комментарии» в шапке страницы, чтобы прочитать спойлер):