Как легко сортировать числа? (1 минутА, 2 минутЫ и т.д)

У меня есть дискорд бот на python. Но при выдаче бана/мута пишет не правильно (например: 1 минуТ). Но таких примеров реально много и написать все в if 2 or 3 or 4 не очень... Как можно обучить бота понимать какое это число и правильно писать слово?


Ответы (4 шт):

Автор решения: punchel

Ответил бы в комментарии, но нет рейтинга. Никакого машинного обучения не надо. Классическая задача, гуглить "склонение существительных после числительных", "Генерация множественных числительных в согласовании с существительным" и т.д.

→ Ссылка
Автор решения: KABAN PUNK
def conv(n): 
    es = ['а', 'ы', '']
    n = n % 100
    if n>=11 and n<=19:
        s=es[2] 
    else:
        i = n % 10
        if i == 1:
            s = es[0] 
        elif i in [2,3,4]:
            s = es[1] 
        else:
            s = es[2] 
    return s 

for i in range(1,150):
    print('{} минут{}'.format(i, conv(i)))
→ Ссылка
Автор решения: Alexandr Kiseloy
def decl(number: int, titles: list):
    cases = [ 2, 0, 1, 1, 1, 2 ]
    if 4 < number % 100 < 20:
        idx = 2
    elif number % 10 < 5:
        idx = cases[number % 10]
    else:
        idx = cases[5]

return titles[idx]

Вызов

decl(21, ['яблоко', 'яблока', 'яблок'])
→ Ссылка
Автор решения: Григорий Власов

Можно использовать библиотеку pymorphy2:

import pymorphy2

MINUTE = 1

morph = pymorphy2.MorphAnalyzer()
print(f'{MINUTE} {morph.parse("минута")[0].make_agree_with_number(MINUTE).word}')

Вывод:

1 минута
→ Ссылка