From e6e2f3b77c9a7a36a374f6636df281280fe445b8 Mon Sep 17 00:00:00 2001 From: Eugen Savrasov Date: Mon, 17 Oct 2022 20:59:10 +0300 Subject: [PATCH 1/4] code according to PEP8 --- main.py | 55 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/main.py b/main.py index 1f468d66e..b96e461a6 100644 --- a/main.py +++ b/main.py @@ -3,11 +3,17 @@ 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)}') + return (f'{char_name} нанёс урон противнику равный', + f'{5 + randint(-3, -1)}') + return (f'{char_name} лох чилийский все профуфукал') + + def defence(char_name, char_class): if char_class == 'warrior': return (f'{char_name} блокировал {10 + randint(5, 10)} урона') @@ -15,15 +21,20 @@ def defence(char_name, char_class): return (f'{char_name} блокировал {10 + randint(-2, 2)} урона') if char_class == 'healer': return (f'{char_name} блокировал {10 + randint(2, 5)} урона') + return (f'{char_name} не блокировал и наверняка умер') + + def special(char_name, char_class): - if char_class == 'warrior': - return (f'{char_name} применил специальное умение «Выносливость {80 + 25}»') + if char_class == 'warrior': + return (f'{char_name} применил специальное умение «Выносливость', + f'{80 + 25}»') if char_class == 'mage': - return (f'{char_name} применил специальное умение «Атака {5 + 40}»') + return (f'{char_name} применил специальное умение', + f'«Атака {5 + 40}»') if char_class == 'healer': - return (f'{char_name} применил специальное умение «Защита {10 + 30}»') - - + return (f'{char_name} применил специальное умение «Защита', + f'{10 + 30}»') + return (f'{char_name} не применил специальное умение и потому ...') def start_training(char_name, char_class): @@ -34,7 +45,9 @@ def start_training(char_name, char_class): if char_class == 'healer': print(f'{char_name}, ты Лекарь — чародей, способный исцелять раны.') print('Потренируйся управлять своими навыками.') - print('Введи одну из команд: attack — чтобы атаковать противника, defence — чтобы блокировать атаку противника или special — чтобы использовать свою суперсилу.') + print('Введи одну из команд: attack — чтобы атаковать противника, ', + 'defence — чтобы блокировать атаку противника или special', + ' — чтобы использовать свою суперсилу.') print('Если не хочешь тренироваться, введи команду skip.') cmd = None while cmd != 'skip': @@ -47,18 +60,26 @@ def start_training(char_name, char_class): print(special(char_name, char_class)) return 'Тренировка окончена.' + def choice_char_class(): approve_choice = None char_class = None 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 @@ -72,6 +93,6 @@ def main(): print('Воитель, Маг, Лекарь') char_class = choice_char_class() print(start_training(char_name, char_class)) - -main() \ No newline at end of file + +main() From 35c212ae3615170006e80c620fa6319ccf4cc8d4 Mon Sep 17 00:00:00 2001 From: Eugen Savrasov Date: Tue, 18 Oct 2022 11:18:47 +0300 Subject: [PATCH 2/4] release --- main.py | 80 +++++++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 42 deletions(-) diff --git a/main.py b/main.py index b96e461a6..9416ae754 100644 --- a/main.py +++ b/main.py @@ -1,55 +1,53 @@ from random import randint -def attack(char_name, char_class): +def attack(char_name: str, char_class: str) -> str: if char_class == 'warrior': - return (f'{char_name} нанёс урон противнику равный', + return (f'{char_name} нанёс противнику урон, равный ' f'{5 + randint(3, 5)}') if char_class == 'mage': - return (f'{char_name} нанёс урон противнику равный', + return (f'{char_name} нанёс противнику урон, равный ' f'{5 + randint(5, 10)}') if char_class == 'healer': - return (f'{char_name} нанёс урон противнику равный', + return (f'{char_name} нанёс противнику урон, равный ' f'{5 + randint(-3, -1)}') return (f'{char_name} лох чилийский все профуфукал') -def defence(char_name, char_class): +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)} урона') + return (f'{char_name} блокировал {10 + randint(2, 5)} ед. урона') return (f'{char_name} не блокировал и наверняка умер') -def special(char_name, char_class): +def special(char_name: str, char_class: str) -> str: if char_class == 'warrior': - return (f'{char_name} применил специальное умение «Выносливость', - f'{80 + 25}»') + return (f'{char_name} применил специальное умение ' + f'«Выносливость {80 + 25}»') if char_class == 'mage': - return (f'{char_name} применил специальное умение', - f'«Атака {5 + 40}»') + return (f'{char_name} применил специальное умение «Атака {5 + 40}»') if char_class == 'healer': - return (f'{char_name} применил специальное умение «Защита', - f'{10 + 30}»') + 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': @@ -61,38 +59,36 @@ def start_training(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(): +def main() -> str: 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() + return char_name From a2dedc8fcb6b8a97ba03a62c30318e101649cfdc Mon Sep 17 00:00:00 2001 From: Eugen Savrasov Date: Wed, 19 Oct 2022 09:12:21 +0300 Subject: [PATCH 3/4] release --- main.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 9416ae754..43b73682a 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,13 @@ +"""Какая то мутная программа для +тренировки програмирования.""" + from random import randint +from graphic_arts.start_game_banner import run_screensaver def attack(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты атаки.""" + if char_class == 'warrior': return (f'{char_name} нанёс противнику урон, равный ' f'{5 + randint(3, 5)}') @@ -15,6 +21,7 @@ def attack(char_name: str, char_class: str) -> str: def defence(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты защиты.""" if char_class == 'warrior': return (f'{char_name} блокировал {10 + randint(5, 10)} ед. урона') if char_class == 'mage': @@ -25,6 +32,8 @@ def defence(char_name: str, char_class: str) -> str: def special(char_name: str, char_class: str) -> str: + """Функция обрабатыает варианты + применения специальных навыков.""" if char_class == 'warrior': return (f'{char_name} применил специальное умение ' f'«Выносливость {80 + 25}»') @@ -36,6 +45,7 @@ def special(char_name: str, char_class: str) -> str: def start_training(char_name: str, char_class: str) -> str: + """Функция обрабатыает начало тренировки, выбок роли.""" if char_class == 'warrior': print(f'{char_name}, ты Воитель — великий мастер ближнего боя.') if char_class == 'mage': @@ -60,6 +70,7 @@ def start_training(char_name: str, char_class: str) -> str: def choice_char_class() -> str: + """Функция обрабатыает выбор имени и описывает функционал роли.""" approve_choice: str = '' char_class: str = '' while approve_choice != 'y': @@ -81,7 +92,8 @@ def choice_char_class() -> str: return char_class -def main() -> str: +if __name__ == '__main__': + run_screensaver() print('Приветствую тебя, искатель приключений!') print('Прежде чем начать игру...') char_name: str = input('...назови себя: ') @@ -91,4 +103,3 @@ def main() -> str: print('Воитель, Маг, Лекарь') char_class: str = choice_char_class() print(start_training(char_name, char_class)) - return char_name From b410356bec3f29ce93e6ad5222d1c8f8f15a4d49 Mon Sep 17 00:00:00 2001 From: Eugen Savrasov Date: Thu, 20 Oct 2022 15:12:57 +0300 Subject: [PATCH 4/4] add working version without classes --- 99.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ graphic_arts | 1 + requirements.txt | 21 ++++++++++++ test_module.py | 13 ------- 4 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 99.py create mode 160000 graphic_arts create mode 100644 requirements.txt delete mode 100644 test_module.py 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/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}` не найден в корне репозитория' -