Конвертер строк
Хочу написать функцию, которая будет писать строчку в нужном падеже в зависимости от числа, пример:
1 сервер
2 сервера
3 сервера
4 сервера
5 серверов
6 серверов
7 серверов
8 серверов
9 серверов
10 серверов
11 серверов
<...>
21 сервер
22 сервера
23 сервера
24 сервера
25 серверов
26 серверов
27 серверов
28 серверов
29 серверов
30 серверов
31 сервер
32 сервера
33 сервера
34 сервера
35 серверов
<...>
110 серверов
111 серверов
115 серверов
121 сервер
122 сервера
Пока что 0 идей как можно это реализовать, так как в зависимости от десятков и сотен окончания всегда разные.
Помогите, пожалуйста.
Ответы (1 шт):
Автор решения: denisnumb
→ Ссылка
На самом деле все проще. Есть всего 4 условия:
- Числа-исключения
11,12,13и14-Серверов
Для всех остальных чисел:
- Если на конце
1, значитСервер(1, 21, 31, 531) - Если на конце
2,3или4, значитСервера(2, 34, 53) - Если на конце
5,6,7,8,9или0, значит тожеСерверов(0, 100, 57, 39, 10005)
Чтобы получить последнюю цифру числа, достаточно получить остаток от деления этого числа на 10.
В Python это записывается через оператор %.
155 % 10; 155 делить на 10 будет 15, остаток 5. Смотрим 4 условие - 155 Серверов
Ну а далее делаем несложную функцию:
def word_form(value):
if value in [11, 12, 13, 14]:
return 'Серверов'
elif value % 10 == 1:
return 'Сервер'
elif value % 10 in [2, 3, 4]:
return 'Сервера'
elif value % 10 in [5, 6, 7, 8, 9, 0]:
return 'Серверов'
Функция выше проще читается, но компактнее это можно записать так:
def word_form(value):
if (value % 100 in (11, 12, 13, 14)) or (value % 10 in (5, 6, 7, 8, 9, 0)):
return 'Серверов'
return 'Сервер' if (value % 10 == 1) else 'Сервера'