whtmst
@whtmst
https://band.link/whtmst

Задача на Python, просьба помочь понять формулу, как она реализована?

Всем доброго времени суток. Уважаемые кодеры.
Я сейчас прохожу начальные курсы по пайтону и там была вот такая вот задачка:

В институте биоинформатики по офису передвигается робот. Недавно студенты из группы программистов написали для него программу, по которой робот, когда заходит в комнату, считает количество программистов в ней и произносит его вслух: "n программистов".

Для того, чтобы это звучало правильно, для каждого n нужно использовать верное окончание слова.

Напишите программу, считывающую с пользовательского ввода целое число n (неотрицательное), выводящее это число в консоль вместе с правильным образом изменённым словом "программист", для того, чтобы робот мог нормально общаться с людьми, например: 1 программист, 2 программиста, 5 программистов.

В комнате может быть очень много программистов. Проверьте, что ваша программа правильно обработает все случаи, как минимум до 1000 человек.

Дополнительный комментарий к условию:
Обратите внимание, что задача не так проста, как кажется на первый взгляд. Если ваше решение не проходит какой-то тест, это значит, что вы не рассмотрели какой-то из случаев входных данных (число программистов 0 ≤ n ≤ 1000). Обязательно проверяйте свои решения на дополнительных значениях, а не только на тех, что приведены в условии задания.


Я набросал код, все вроде как работало, но не проверил на числа 21, 31, 41 и т.п.
То есть мой код при вводе 21, выдавал вместо 21 программист, 21 программистов.
Также было и с числом допустим 994, мой код выдавал 994 программистов, вместо 994 программиста.
Все остальное работало. Один участник курсов, написал мне ответ, но не хочет объяснять как он вывел формулу правильного вычисления.

Вот код:
tp = int(input('Введите число: '))

if tp < 0:
    print('Ошибка, введите положительное число')
elif tp % 10 == 1 and tp % 100 != 11: # Формула 1
    print(tp, 'программист')
elif tp % 10 >= 2 and tp % 10 <= 4 and (tp % 100 < 10 or tp % 100 > 20): # Формула 2
    print(tp, 'программиста')
else:
    print(tp, 'программистов')


Формулу под номером 1 я понял, то есть если остаток числа n равен 1 и остаток не равен 11, то это программист.
Во второй формуле я понял только, что если остаток n больше или равен 2 и меньше или равен 4, то это программиста, а вот вторую часть формулы не как не могу понять.
Если кому не трудно уделить 5-10 минут времени, дайте пожалуйста внятное объяснение.

Заранее большое спасибо за ответы.
  • Вопрос задан
  • 15852 просмотра
Решения вопроса 1
@AlexSku
не буду отвечать из-за модератора
В формулу 2 ("программиста") попадают числа, оканчивающиеся на 2, 3, 4, напр., 2, 22, 32.
Однако если последние две цифры это числа 12-14, то их надо исключить: 12, 112, 212... (это формула 3). Поэтому и берётся остаток от деления на 100.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Tark
@Tark
Pyramid'альный мир
... если остаток n больше или равен 2 и меньше или равен 4, но при этом остаток от деления введённого числа на 100 меньше 10 или больше 20.

Это для того, чтобы сказать "112 программистов", но "102 или 122 программиста".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы