Задача на остаток от деления Python
Здравствуйте! Помогите с задачей.
В институте биоинформатики по офису передвигается робот. Недавно студенты из группы программистов написали для него программу, по которой робот, когда заходит в комнату, считает количество программистов в ней и произносит его вслух: "n программистов".
Для того, чтобы это звучало правильно, для каждого n нужно использовать верное окончание слова.
Напишите программу, считывающую с пользовательского ввода целое число n (неотрицательное), выводящее это число в консоль вместе с правильным образом изменённым словом "программист", для того, чтобы робот мог нормально общаться с людьми, например: 1 программист, 2 программиста, 5 программистов.
В комнате может быть очень много программистов. Проверьте, что ваша программа правильно обработает все случаи, как минимум до 1000 человек.
Вот мое решение :
n=int(input())
p1='программист'
p2='программиста'
p3='программистов'
if n==1 or n==111:
print(n,p1)
elif n==2 or n==3 or n==4:
print(n,p2)
elif n%10==5 or n%10==6 or n%10==7 or n%10==8 or n%10==9 or n%10==0:
print(n,p3)
elif n%100==11 or n%100==12 or n%100==13 or n%100==14 or n%100==15 or n%100==16 or n%100==17 or n%100==18 or n%100==19:
print(n,p3)
Не проходит число например 362. Что не учтено? Помогите пожалуйста, просьба не переписывать мой код, а сказать где в моем написании ошибка или что нужно добавить
Не уверен, что "111 программист" - правильный вариант :)
PS: чем не устраивает типовой вариант?
Существует три варианта склонения:
Если остаток от деления числительного на 10 равен 1.
Например это числа: 1, 21, 31 и т. д. Форма существительного для них будет одинакова: «1 день», «21 билет».
Но, исключение составляет число 11 и заканчивающиеся на 11 числа 111, 211 и т. д. Остаток от деления таких чисел на 10 тоже равен 1, но использовать ту же форму существительного нельзя: «11 день».
Поэтому в функции этот момент должен учитываться.
Если остаток от деления числительного на 10 равен 2, 3 или 4.
Например это числа: 2, 23, 34 и т. д. Форма существительного для них будет тоже одинакова: «22 дня», «4 билета».
Но, опять не обошлось без исключений. Числа 12, 13, 14 и заканчивающиеся на эти цифры числа 114, 212 и т. д. Как и в предыдущем случае, остаток от деления таких чисел на 10 удовлетворяет условию, но форма существительного будет неверна: «14 дня».
Этот момент тоже должен учитываться в функции.
Все остальные остатки от деления числительного на 10, а также исключения из предыдущих двух вариантов — используют третью форму существительного. Примеры: «12 дней», «18 билетов», «111 часов».
Всё намного проще: особый случай - когда кол-во десятков в числе равно 1; для всех остальных чисел важна только последняя цифра.
p = 'программист' + ['ов', '', 'а', 'а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов'][0 if n // 10 % 10 == 1 else n % 10]
Есть что-то похожее, только с коровами
