Top.Mail.Ru
Ответы

Задача на остаток от деления 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. Что не учтено? Помогите пожалуйста, просьба не переписывать мой код, а сказать где в моем написании ошибка или что нужно добавить

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
6лет

Не уверен, что "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 часов».

Аватар пользователя
Высший разум
6лет

Всё намного проще: особый случай - когда кол-во десятков в числе равно 1; для всех остальных чисел важна только последняя цифра.

p = 'программист' + ['ов', '', 'а', 'а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов'][0 if n // 10 % 10 == 1 else n % 10]

Аватар пользователя
Оракул
6лет

Есть что-то похожее, только с коровами