Case17. Given an integer in the range 10-40, which determines the number of training assignments on a certain topic. Output a string-description of the specified number of tasks, for example: 18 - "eighteen study assignments", 23 - "twenty three study assignments", 31 - "thirty one study assignments".

Solution in Python 3:

import random

dcat = {
11 : 'eleven',
12 : 'twelve',
13 : 'thirteen',
14 : 'fourteen',
15 : 'fifteen',
16 : 'sixteen',
17 : 'seventeen',
18 : 'eighteen',
19 : 'nineteen',
}

desyatki = {
10 : 'ten',
20 : 'twenty',
30 : 'thirty',
40 : 'forty'
}

edinici = {
1 : 'one',
2 : 'two',
3 : 'three',
4 : 'four',
5 : 'five',
6 : 'six',
7 : 'seven',
8 : 'eight',
9 : 'nine'
}

try:
N = random.randrange(10,41)
#N = 40
print("N = ",N)
if 10 < N and N < 20:
print("{0} study assignments".format(dcat[N]))
else:
r = N%10
print("r = ",r)
if r == 0:
print("{0} study assignments".format(desyatki[N]))
else:
q = int(N/10)*10
print("q = ",q)
print("{0} {1} study assignments".format(desyatki[q], edinici[r]))

except KeyError as e:
print('Error')