@Ui5509
Ui

Задача на Python?

Привет всем, я прохожу курс на Stepik.org (не реклама, не баньте), посвященный ЯП Python. Не могу решить задачу.
Сама задача:
В институте биоинформатики по офису передвигается робот. Недавно студенты из группы программистов написали для него программу, по которой робот, когда заходит в комнату, считает количество программистов в ней и произносит его вслух: "n программистов".

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

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

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

Вот мой код:
a=int(input())
if a%5==0:
    print(a ,'программистов')
if a>0 and a%2==0:
    print(a, 'программиста')
if not a%5==0 and not a%2==0:
    print(a, 'программист')


При запуске кода на самом сайте выдает вот что:

5b8988a00422c703214656.pngOutput/Input:

5b89896dc85ea447070406.png

В чем моя ошибка? Тестирую код в IDLE Python3.7 . Помогите пожалуйста!
  • Вопрос задан
  • 2950 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Teslaman
Задача скучная, поэтому я написал программу для генерации программ для решения этой задачи.

Чтобы получить программу, решающую твою задачу, скопируй следующий код в файл с расширением ".py" и запусти. Скрипт создаст новый скрипт task.py, в котором будет решение твоей задачи.

import sys


def main(programmers: int):
    with open("task.py", "w") as f:
        f.write("a = int(input('Введите количество программистов: '))\n\n")
        f.write(f"if a == 0:\n\tprint(0, 'программистов')\n")
        for i in range(1, programmers + 1):
            programmers = "программист" + get_ending(i)
            f.write(f"elif a == {i}:\n\tprint({i}, '{programmers}')\n")
        print("Твоя программа готова! Запусти её командой: python task.py")


def get_ending(num: int) -> str:
    if num % 100 in {11, 12, 13, 14}:
        return "ов"
    elif num % 10 in {0, 5, 6, 7, 8, 9}:
        return "ов"
    elif num % 10 in {2, 3, 4}:
        return "а"
    elif num % 10 in {1}:
        return ""
    else:
        raise AssertionError("Unexpected error")


if __name__ == '__main__':
    try:
        programmers = abs(int(input(
            "Для какого количества программистов сгенерировать решения?\nВведи целое число: ")))
    except ValueError:
        print("Количество программистов должно быть целым числом!")
        sys.exit(1)
    main(programmers)
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
развлекайся с цифрой 126

раз уж тыт тут - напечатай следующуюб фразу на листике и повесь

фраза:

программа должна выдавать правильные результаты,
и НЕ ВЫДАВАТЬ неправильные


вот со второй частью у всех начинающих прогеров проблемы
Ответ написан
@bbkmzzzz
3 варианта у существительных после числительных.
Правила простые:
оканчивается на 1, но не на 11
оканчивается на 2 3 4, И НЕ в диапазоне 10-20(включительно)
все остальные

формы слов отвечают числам 1,2,5

например:
1 ворона
2 вороны
5 ворон

берем остаток от деления нужного число на 10 и на 100 и пробегаем по условиям.
так можно любые числа проверять, а не до 1000, включая отрицательные

words = ['ворона', 'вороны', 'ворон']

def plural(num, words):
    if num == 0:
        return words[2]
    d10 = num % 10
    d100 = num % 100
    if d10 == 1 and d100 != 11:
        return words[0]
    elif (2 <= d10 <= 4) and (d100 < 10 or d100 > 20):
        return words[1]
    else:
        return words[2]
num = 21
print(num, plural(num, words))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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