3 варианта у существительных после числительных.
Правила простые:
    оканчивается на 1, но не на 11
    оканчивается на 2 3 4, И НЕ в диапазоне 10-20(включительно)
    все остальные
формы слов отвечают числам 1,2,5
например:
1 ворона
2 вороны
5 ворон
берем остаток от деления нужного число на 10 и на 100 и пробегаем по условиям.
так можно любые числа проверять, а не до 1000, включая отрицательные
words = ['ворона', 'вороны', 'ворон']
def plural(num, words):
    if num == 0:
        return words[2]
    d10 = num % 10
    d100 = num % 100
    if d10 == 1 and d100 != 11:
        return words[0]
    elif (2 <= d10 <= 4) and (d100 < 10 or d100 > 20):
        return words[1]
    else:
        return words[2]
num = 21
print(num, plural(num, words))