Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Помогите найти ошибку в коде

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

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

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

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

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

n

1000
0≤n≤1000). Обязательно проверяйте свои решения на дополнительных значениях, а не только на тех, что приведены в условии задания.

Так как задание повышенной сложности, вручную код решений проверяться не будет. Если вы столкнулись с ошибкой в первых четырёх тестах, проверьте, что вы используете только русские символы для ответа. В остальных случаях ищите ошибку в логике работы программы.


n = int(input())
for i in range(0 <= n <= 1000):
if (n == 11) or (n % 10 == 0) or (n % 10 == 5) or (n % 10 == 6) or (n % 10 == 7) or (n % 10 == 8) or (n % 10 == 9):
print(n, " программистов")
elif n % 10 == 1:
print(n, " программист")
elif (n % 10 == 2) or (n % 10 == 3) or (n % 10 == 4):
print(n, " программиста")

По дате
По рейтингу
Аватар пользователя
Знаток
2мес

n = int(input("Введите количество программистов: "))

if 0 <= n <= 1000: # Проверяем, что n находится в допустимом диапазоне
if (n % 100 == 11) or (n % 10 == 0) or (n % 10 >= 5 and n % 10 <= 9):
print(n, "программистов")
elif n % 10 == 1:
print(n, "программист")
elif (n % 10 == 2) or (n % 10 == 3) or (n % 10 == 4):
print(n, "программиста")
else:
print("Введите число от 0 до 1000.")
Объяснение исправлений:
Проверка диапазона: Условия проверки диапазона 0 <= n <= 1000 были перенесены в отдельную проверку перед основным логическим блоком. В вашем исходном коде использовался цикл for, что неправильно, так как это не цикл.

Проверка на окончания:

Условие (n % 100 == 11) добавлено, чтобы обработать случаи, когда число заканчивается на 11, 111 и т.д. (например, 11 программистов).
Условия для окончаний "программист", "программиста" и "программистов" были скорректированы, чтобы учесть все возможные случаи.
Вывод сообщения: Убедитесь, что в выводе используются только русские символы, как указано в условии задачи.

Теперь программа корректно обрабатывает все случаи для чисел от 0 до 1000.

Аватар пользователя
Высший разум
2мес
123456789
 n = int(input())
if 10 <= n % 100 <= 19: # особый случай - кол-во десятков равно 1
  print(n, 'программистов')
elif n % 10 == 1: # оканчивается на 1
  print(n, 'программист')
elif n % 10 in [2, 3, 4]: # оканчивается на 2, 3, 4
  print(n, 'программиста')
else:
  print(n, 'программистов') 

Но проще сделать через массив окончаний:

123
 n = int(input())
t = ['ов', '', 'а', 'а', 'а', 'ов', 'ов', 'ов', 'ов', 'ов']
print(n, 'программист' + t[(n // 10 % 10 != 1) * n % 10])