1.12 Задачи по материалам недели шаг 6

В институте биоинформатики по офису передвигается робот. Недавно студенты из группы программистов написали для него программу, по которой робот, когда заходит в комнату, считает количество программистов в ней и произносит его вслух: "n программистов".
Для того, чтобы это звучало правильно, для каждого n нужно использовать верное окончание слова.
Напишите программу, считывающую с пользовательского ввода целое число n (неотрицательное), выводящее это число в консоль вместе с правильным образом изменённым словом "программист", для того, чтобы робот мог нормально общаться с людьми, например: 1 программист, 2 программиста, 5 программистов.
В комнате может быть очень много программистов. Проверьте, что ваша программа правильно обработает все случаи, как минимум до 1000 человек.
Дополнительный комментарий к условию:
Обратите внимание, что задача не так проста, как кажется на первый взгляд. Если ваше решение не проходит какой-то тест, это значит, что вы не рассмотрели какой-то из случаев входных данных (число программистов 0n1000). Обязательно проверяйте свои решения на дополнительных значениях, а не только на тех, что приведены в условии задания.
Так как задание повышенной сложностивручную код решений проверяться не будет. Если вы столкнулись с ошибкой в первых четырёх тестах, проверьте, что вы используете только русские символы для ответа. В остальных случаях ищите ошибку в логике работы программы.

#код
s = int (input())
n1 =" программистов"
n2 =" программист"
n3 =" программиста"
if s>=0:
if s==0:
print(str(s) + n1)
elif s%100>=10 and s%100<=20:
print(str(s) + n1)
elif s%10==1:
print(str(s) + n2)
elif s%10>=2 and s%10<=4:
print(str(s) + n3)
else:
print(str(s) + n1)

Комментарии

  1. у меня почему то выше указанный код не работает

    зато есть другой вариант
    [python]
    # reshenie
    n=int(input())
    print(n,'программист'+('ов' if n%10==0 or 4<n%10<10 or 10<n%100<15 else 'а' if 1<n%10<5 else ''))
    [/python]

    или есть другое решение
    [python]
    a = int(input())
    b = 'программист'
    if a%10==1 and not a%100==11:
    print(a, b)
    elif 1<a%10<5 and not 10<a%100<15:
    print(a, b + 'а')
    else:
    print(a, b + 'ов')
    [/python]

    ОтветитьУдалить
  2. #Есть и другие варианты решения
    n = int(input())
    if (n % 10 == 1 and n%100 != 11):
    print(n, 'программист')
    elif (n % 10 in [2, 3, 4] and not n % 100 in [12, 13, 14] ):
    print(n, 'программиста')
    else:
    print(n, 'программистов')

    # Решение 4
    b = int(input())
    if (b % 100 >= 11 and b % 100 <= 19) or (b % 10 == 0 or b % 10 >= 5 and b % 10 <= 9): print(b, "программистов")
    elif b % 10 == 2 or b % 10 == 3 or b % 10 == 4: print(b, "программиста")
    else: print(b, 'программист')

    ОтветитьУдалить
    Ответы
    1. Решение #4 отличный вариант, а так смотрится еще лучше -
      b = int(input())
      if (11 <= b % 100 <= 19) or (b % 10 == 0) or (5 <= b % 10 <= 9):
      print(b, "программистов")
      elif b % 10 in [2, 3, 4]:
      print(b, "программиста")
      else:
      print(b, 'программист')

      Удалить
  3. или вот
    # решение 5
    n = int(input())
    if (n == 1):
    print(n, 'программист')
    elif (n == 2):
    print(n, 'программиста')
    elif (n == 3):
    print(n, 'программиста')
    elif (n == 4):
    print(n, 'программиста')
    elif (20 >= n >= 5):
    print(n, 'программистов')
    elif (n % 10 == 1) and (n != 11) and (n != 111) and (n != 211) and (n != 311) and (n != 411) and (n != 511) and (n != 611) and (n != 711) and (n != 811) and (n != 911):
    print(n, 'программист')
    elif (n == 11) or (n == 111) or (n == 211) or (n == 311) or (n == 411) or (n == 511) or (n == 611) or (n == 711) or (n == 811) or (n == 911):
    print(n, 'программистов')
    elif (n % 10 == 2) and (n != 12) and (n != 112) and (n != 212) and (n != 312) and (n != 412) and (n != 512) and (n != 612) and (n != 712) and (n != 812) and (n != 912):
    print(n, 'программиста')
    elif (n == 12) or (n == 112) or (n == 212) or (n == 312) or (n == 412) or (n == 512) or (n == 612) or (n == 712) or (n == 812) or (n == 912):
    print(n, 'программистов')
    elif (n % 10 == 3) and (n != 13) and (n != 113) and (n != 213) and (n != 313) and (n != 413) and (n != 513) and (n != 613) and (n != 713) and (n != 813) and (n != 913):
    print(n, 'программиста')
    elif (n == 13) or (n == 113) or (n == 213) or (n == 313) or (n == 413) or (n == 513) or (n == 613) or (n == 713) or (n == 813) or (n == 913):
    print(n, 'программистов')
    elif (n % 10 == 4) and (n != 14) and (n != 114) and (n != 214) and (n != 314) and (n != 414) and (n != 514) and (n != 614) and (n != 714) and (n != 814) and (n != 914):
    print(n, 'программиста')
    elif (n == 14) or (n == 114) or (n == 214) or (n == 314) or (n == 414) or (n == 514) or (n == 614) or (n == 714) or (n == 814) or (n == 914):
    print(n, 'программистов')
    else:
    print(n, 'программистов')

    ОтветитьУдалить
  4. а вот краткий вариант

    # Решение
    x = int(input())
    if x % 100 in (11, 12, 13, 14) or x % 10 in (5, 6, 7, 8, 9, 0): print(x, 'программистов')
    elif x % 10 in (2, 3, 4): print(x, 'программиста')
    else: print(x, 'программист')

    ОтветитьУдалить
  5. еще один вариант решения
    n = int(input())
    a = str("программист")
    z = str("а")
    x = str("ов")
    if 0 == n % 10 or 5 == n % 10 or 6 == n % 10 or 7 == n % 10 or 8 == n % 10 or 9 == n % 10:
    print(n, a + x)
    elif 11 == n % 100 or 12 == n % 100 or 13 == n % 100 or 14 == n % 100:
    print( n, a + x)
    elif 2 == n % 10 or 3 == n % 10 or 4 == n % 10:
    print(n, a + z)
    elif 1 == n % 10:
    print(n, a)

    ОтветитьУдалить
  6. a = input()

    if 5 < int(a) < 20 or 5 < int(a)%100 < 20:
    print(a, "программистов")
    elif int(a[-1]) == 1:
    print(a, "программист")
    elif 1 < int(a[-1]) < 5:
    print(a, "программиста")
    else:
    print(a, "программистов")

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

1.12 Задачи по материалам недели шаг 7

1.12 Задачи по материалам недели шаг 5