Конвертер строк

Хочу написать функцию, которая будет писать строчку в нужном падеже в зависимости от числа, пример:

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 условия:

  1. Числа-исключения 11, 12, 13 и 14 - Серверов

Для всех остальных чисел:

  1. Если на конце 1, значит Сервер (1, 21, 31, 531)
  2. Если на конце 2, 3 или 4, значит Сервера (2, 34, 53)
  3. Если на конце 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 'Сервера'
→ Ссылка