Как легко сортировать числа? (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 минута