# Решение задачи #1 - множественная форма числительных

def plural_form(num, form1, form2, form3):
    
    """Текстовое представление множественной формы числительного numeral.
    :param num: числовое значение
    :param form1: согласующаяся текстовая форма для единственного числа и множеств, заканчивающихся на 1 (кроме 11)
    :param form2: согласующаяся текстовая форма для множества от 2 до 4 включительно и множеств, заканчивающихся на эти цифры (кроме 12, 13, 14)
    :param form3: согласующаяся текстовая форма для множества 0 и от 5 до 9 включительно и множеств, заканчивающихся на эти цифры, а также для (11, 12, 13, 14)
    """
    
    # назначаем локальные переменные
    string_out = ''  # выходная текстовая строка
    form_out = ''    # выходная текстовая форма   
    
    if (type(num) == int) and (num >= 0):    # проверка на целочисленность и положительность
        if (num in [0, 5, 6, 7, 8, 9, 11, 12, 13, 14]) or ((num - (num//10)*10) in [0, 5, 6, 7, 8, 9]):   # проверка значения 'num' на соответствие 'form3' 
            form_out = form3
        elif (num == 1) or ((num - (num//10)*10) == 1):    # проверка значения 'num' на соответствие 'form1'
            form_out = form1
        elif (num in [2, 3, 4]) or ((num - (num//10)*10) in [2, 3, 4]):    # проверка значения 'num' на соответствие 'form2'
            form_out = form2
        string_out = f'{num} {form_out}'
    else:
        string_out = 'Вы задали некорректный параметр, он должен быть целочисленным и не отрицательным.'
    return print(string_out)    # результат выполнения функции


print('Результаты выполнения функции согласно задания:')
print('\r')
plural_form(12, 'яблоко', 'яблока', 'яблок')
plural_form(2, 'яблоко', 'яблока', 'яблок')
plural_form(11, 'студент', 'студента', 'студентов')
plural_form(15, 'студент', 'студента', 'студентов')
plural_form(3, 'студент', 'студента', 'студентов')
print('\r')
print('Другие примеры использования функции:')
print('\r')
plural_form(1, 'яблоко', 'яблока', 'яблок')
plural_form(11, 'яблоко', 'яблока', 'яблок')
plural_form(0, 'яблоко', 'яблока', 'яблок')
plural_form(2.37, 'яблоко', 'яблока', 'яблок')
plural_form(-1, 'яблоко', 'яблока', 'яблок')
plural_form(1, 'студент', 'студента', 'студентов')
plural_form(11, 'студент', 'студента', 'студентов')
plural_form(5.68, 'студент', 'студента', 'студентов')
plural_form(3, 'студент', 'студента', 'студентов')
plural_form(25493, 'студент', 'студента', 'студентов')
