Case 17. Дано целое число в диапазоне 10–40, определяющее количество учебных заданий по некоторой теме. Вывести строку-описание указанного количества заданий, обеспечив правильное согласование числа со словами «учебное задание», например: 18 — «восемнадцать учебных заданий», 23 — «двадцать три учебных задания», 31 — «тридцать одно учебное задание».

Решение на Python 3

import random

dcat = {
11 : 'одиннадцать',
12 : 'двенадцать',
13 : 'тринадцать',
14 : 'четырнадцать',
15 : 'пятнадцать',
16 : 'шестнадцать',
17 : 'семнадцать',
18 : 'восемнадцать',
19 : 'девятнадцать',
}

desyatki = {
10 : 'десять',
20 : 'двадцать',
30 : 'тридцать',
40 : 'сорок'
}

edinici = {
1 : 'одно учебное задание',
2 : 'два учебных задания',
3 : 'три учебных задания',
4 : 'четыре учебных задания',
5 : 'пять учебных заданий',
6 : 'шесть учебных заданий',
7 : 'семь учебных заданий',
8 : 'восемь учебных заданий',
9 : 'девять учебных заданий'
}

try:
N = random.randrange(10,41)
#N = 40
print("N = ",N)
if 10 < N and N < 20:
print("{0} учебных заданий".format(dcat[N]))
else:
r = N%10
print("r = ",r)
if r == 0:
print("{0} учебных заданий".format(desyatki[N]))
else:
q = int(N/10)*10
print("q = ",q)
print("{0} {1}".format(desyatki[q], edinici[r]))

except KeyError as e:
print('Ошибка')