diff --git a/99.py b/99.py new file mode 100644 index 000000000..9ec98aaca --- /dev/null +++ b/99.py @@ -0,0 +1,88 @@ +class Human: + def __init__(self, name): + self.name = name + + # ответ по умолчанию для всех одинаковый, можно + # доверить его родительскому классу + def answer_question(self, question): + print('Очень интересный вопрос! Не знаю.') + + def __str__(self): + return self.name + + +class Student(Human): + # метод ask_question() принимает параметр someone: + # это объект, экземпляр класса Curator, Mentor или CodeReviewer, + # которому Student задаёт вопрос; + # параметр question — это просто строка + # имя объекта и текст вопроса задаются при вызове метода ask_question + def __init__(self, name): + super().__init__(name) + + def ask_question(self, someone, question): + # напечатайте на экран вопрос в нужном формате + print(f'{someone}, {question}') + # запросите ответ на вопрос у someone + someone.answer_question(question) + print() # этот print выводит разделительную пустую строку + + +class Curator(Human): + def __init__(self, name): + super().__init__(name) + + def answer_question(self, question): + # здесь нужно проверить, пришёл куратору знакомый вопрос или нет + # если да - ответить на него + # если нет - вызвать метод answer_question() у родительского класса + if question == 'мне грустненько, что делать?': + print('Держись, всё получится. Хочешь видео с котиками?') + else: + super().answer_question(question) + + +# объявите и реализуйте классы CodeReviewer и Mentor +class CodeReviewer(Human): + def __init__(self, name): + super().__init__(name) + + def answer_question(self, question): + # здесь нужно проверить, пришёл куратору знакомый вопрос или нет + # если да - ответить на него + # если нет - вызвать метод answer_question() у родительского класса + if question == 'что не так с моим проектом?': + print('О, вопрос про проект, это я люблю.') + else: + super().answer_question(question) + + +class Mentor(Human): + def __init__(self, name): + super().__init__(name) + + def answer_question(self, question): + # здесь нужно проверить, пришёл куратору знакомый вопрос или нет + # если да - ответить на него + # если нет - вызвать метод answer_question() у родительского класса + if question == 'как устроиться работать питонистом?': + print('Сейчас расскажу.') + elif question == 'мне грустненько, что делать?': + print('Отдохни и возвращайся с вопросами по теории.') + else: + super().answer_question(question) + + +# следующий код менять не нужно, он работает, мы проверяли +student1 = Student('Тимофей') +curator = Curator('Марина') +mentor = Mentor('Ира') +reviewer = CodeReviewer('Евгений') +friend = Human('Виталя') + +student1.ask_question(curator, 'мне грустненько, что делать?') +student1.ask_question(mentor, 'мне грустненько, что делать?') +student1.ask_question(reviewer, 'когда каникулы?') +student1.ask_question(reviewer, 'что не так с моим проектом?') +student1.ask_question(friend, 'как устроиться на работу питонистом?') +student1.ask_question(mentor, 'как устроиться работать питонистом?') \ No newline at end of file diff --git a/graphic_arts b/graphic_arts new file mode 160000 index 000000000..53c35aaef --- /dev/null +++ b/graphic_arts @@ -0,0 +1 @@ +Subproject commit 53c35aaeff79bd1ed1c6dddea7838c510ca20b1c diff --git a/main.py b/main.py index 1f468d66e..43b73682a 100644 --- a/main.py +++ b/main.py @@ -1,42 +1,63 @@ +"""Какая то мутная программа для +тренировки програмирования.""" + from random import randint +from graphic_arts.start_game_banner import run_screensaver + +def attack(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты атаки.""" -def attack(char_name, char_class): if char_class == 'warrior': - return (f'{char_name} нанёс урон противнику равный {5 + randint(3, 5)}') + return (f'{char_name} нанёс противнику урон, равный ' + f'{5 + randint(3, 5)}') if char_class == 'mage': - return (f'{char_name} нанёс урон противнику равный {5 + randint(5, 10)}') + return (f'{char_name} нанёс противнику урон, равный ' + f'{5 + randint(5, 10)}') if char_class == 'healer': - return (f'{char_name} нанёс урон противнику равный {5 + randint(-3, -1)}') -def defence(char_name, char_class): + return (f'{char_name} нанёс противнику урон, равный ' + f'{5 + randint(-3, -1)}') + return (f'{char_name} лох чилийский все профуфукал') + + +def defence(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты защиты.""" if char_class == 'warrior': - return (f'{char_name} блокировал {10 + randint(5, 10)} урона') + return (f'{char_name} блокировал {10 + randint(5, 10)} ед. урона') if char_class == 'mage': - return (f'{char_name} блокировал {10 + randint(-2, 2)} урона') + return (f'{char_name} блокировал {10 + randint(-2, 2)} ед. урона') if char_class == 'healer': - return (f'{char_name} блокировал {10 + randint(2, 5)} урона') -def special(char_name, char_class): - if char_class == 'warrior': - return (f'{char_name} применил специальное умение «Выносливость {80 + 25}»') + return (f'{char_name} блокировал {10 + randint(2, 5)} ед. урона') + return (f'{char_name} не блокировал и наверняка умер') + + +def special(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты + применения специальных навыков.""" + if char_class == 'warrior': + return (f'{char_name} применил специальное умение ' + f'«Выносливость {80 + 25}»') if char_class == 'mage': return (f'{char_name} применил специальное умение «Атака {5 + 40}»') if char_class == 'healer': return (f'{char_name} применил специальное умение «Защита {10 + 30}»') + return (f'{char_name} не применил специальное умение и потому ...') - - -def start_training(char_name, char_class): +def start_training(char_name: str, char_class: str) -> str: + """Функция обрабатыает начало тренировки, выбок роли.""" if char_class == 'warrior': - print(f'{char_name}, ты Воитель — отличный боец ближнего боя.') + print(f'{char_name}, ты Воитель — великий мастер ближнего боя.') if char_class == 'mage': print(f'{char_name}, ты Маг — превосходный укротитель стихий.') if char_class == 'healer': print(f'{char_name}, ты Лекарь — чародей, способный исцелять раны.') print('Потренируйся управлять своими навыками.') - print('Введи одну из команд: attack — чтобы атаковать противника, defence — чтобы блокировать атаку противника или special — чтобы использовать свою суперсилу.') + print('Введи одну из команд: attack — чтобы атаковать противника, ' + 'defence — чтобы блокировать атаку противника или ' + 'special — чтобы использовать свою суперсилу.') print('Если не хочешь тренироваться, введи команду skip.') - cmd = None + cmd: str = '' while cmd != 'skip': cmd = input('Введи команду: ') if cmd == 'attack': @@ -47,31 +68,38 @@ def start_training(char_name, char_class): print(special(char_name, char_class)) return 'Тренировка окончена.' -def choice_char_class(): - approve_choice = None - char_class = None + +def choice_char_class() -> str: + """Функция обрабатыает выбор имени и описывает функционал роли.""" + approve_choice: str = '' + char_class: str = '' while approve_choice != 'y': - char_class = input('Введи название персонажа, за которого хочешь играть: Воитель — warrior, Маг — mage, Лекарь — healer: ') + char_class = input('Введи название персонажа, ' + 'за которого хочешь играть: Воитель — warrior, ' + 'Маг — mage, Лекарь — healer: ') if char_class == 'warrior': - print('Воитель — дерзкий воин ближнего боя. Сильный, выносливый и отважный.') + print('Воитель — дерзкий воин ближнего боя. ' + 'Сильный, выносливый и отважный.') if char_class == 'mage': - print('Маг — находчивый воин дальнего боя. Обладает высоким интеллектом.') + print('Маг — находчивый воин дальнего боя. ' + 'Обладает высоким интеллектом.') if char_class == 'healer': - print('Лекарь — могущественный заклинатель. Черпает силы из природы, веры и духов.') - approve_choice = input('Нажми (Y), чтобы подтвердить выбор, или любую другую кнопку, чтобы выбрать другого персонажа ').lower() + print('Лекарь — могущественный заклинатель. ' + 'Черпает силы из природы, веры и духов.') + approve_choice = input('Нажми (Y), чтобы подтвердить выбор, ' + 'или любую другую кнопку, ' + 'чтобы выбрать другого персонажа ').lower() return char_class -def main(): +if __name__ == '__main__': + run_screensaver() print('Приветствую тебя, искатель приключений!') print('Прежде чем начать игру...') - char_name = input('...назови себя: ') + char_name: str = input('...назови себя: ') print(f'Здравствуй, {char_name}! ' 'Сейчас твоя выносливость — 80, атака — 5 и защита — 10.') print('Ты можешь выбрать один из трёх путей силы:') print('Воитель, Маг, Лекарь') - char_class = choice_char_class() + char_class: str = choice_char_class() print(start_training(char_name, char_class)) - - -main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..678b66800 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,21 @@ +attrs==22.1.0 +flake8==5.0.4 +flake8-broken-line==0.6.0 +flake8-isort==5.0.0 +flake8-plugin-utils==1.3.2 +flake8-return==1.1.3 +iniconfig==1.1.1 +isort==5.10.1 +mccabe==0.7.0 +mypy==0.982 +mypy-extensions==0.4.3 +packaging==21.3 +pep8-naming==0.13.2 +pluggy==1.0.0 +py==1.11.0 +pycodestyle==2.9.1 +pyflakes==2.5.0 +pyparsing==3.0.9 +pytest==7.1.3 +tomli==2.0.1 +typing_extensions==4.4.0 diff --git a/test_module.py b/test_module.py deleted file mode 100644 index 6112f01ff..000000000 --- a/test_module.py +++ /dev/null @@ -1,13 +0,0 @@ -import os - - -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -dir_files = [filename.lower() for filename in os.listdir(BASE_DIR)] - -files_list = ['main.py', 'readme.md'] - - -def test_program(): - for filename in files_list: - assert filename in dir_files, f'Файл `{filename}` не найден в корне репозитория' -