diff --git a/lesson5-normal.py b/lesson5-normal.py new file mode 100644 index 0000000..49dcc25 --- /dev/null +++ b/lesson5-normal.py @@ -0,0 +1,57 @@ +# Задача-1: +# Напишите небольшую консольную утилиту, +# позволяющую работать с папками текущей директории. +# Утилита должна иметь меню выбора действия, в котором будут пункты: +# 1. Перейти в папку +# 2. Просмотреть содержимое текущей папки +# 3. Удалить папку +# 4. Создать папку +# При выборе пунктов 1, 3, 4 программа запрашивает название папки +# и выводит результат действия: "Успешно создано/удалено/перешел", +# "Невозможно создать/удалить/перейти" + +# Для решения данной задачи используйте алгоритмы из задания easy, +# оформленные в виде соответствующих функций, +# и импортированные в данный файл из easy.py + +from lesson5_easy import my_chdir, my_list, my_rmdir, my_mkdir +import os + +do = { + 1: my_chdir, + 2: my_list, + 3: my_rmdir, + 4: my_mkdir +} + +def start(): + while True: + try: + choice = int(input('---------------------\n' + 'Ваш выбор:\n' + '1. Перейти в папку\n' + '2. Просмотреть содержимое текущей папки\n' + '3. Удалить папку\n' + '4. Создать папку\n' + '5. Выход\n' + '---------------------\n')) + except ValueError: + print('Неверный ввод!') + continue + + if choice == 5: + break + + if choice in [1, 3, 4]: + folder_name = input('Введте название папки ') + else: + folder_name = '' + + if choice: + if do.get(choice): + print(do[choice](f'{os.getcwd()}/{folder_name}')) + else: + print('Неверный ввод!') + + +start() \ No newline at end of file diff --git a/lesson5_easy.py b/lesson5_easy.py new file mode 100644 index 0000000..5ad7e51 --- /dev/null +++ b/lesson5_easy.py @@ -0,0 +1,66 @@ +import os + +#функции для normal +def my_chdir(path): + try: + os.chdir(path) + return 'Переход в папку завершён' + except FileNotFoundError: + return 'Папка не найдена' + +def my_list(path): + return '\n'.join(os.listdir(path)) + +def my_rmdir(path): + try: + os.removedirs(path) + return 'Папка удалена' + except FileNotFoundError: + return 'Папка не найдена' + +def my_mkdir(path): + try: + os.mkdir(path) + return 'Папка создана' + except FileExistsError: + return 'Директория уже существует' + +if __name__ == '__main__': + +# Задача-1: +# Напишите скрипт, создающий директории dir_1 - dir_9 в папке, +# из которой запущен данный скрипт. +# И второй скрипт, удаляющий эти папки. + + path = os.getcwd() + print(path) + for i in range(1, 10): + try: + os.mkdir(f'{path}\dir_{i}') + except FileExistsError: + print('Такая директория уже существует') + for i in range(1, 10): + try: + os.rmdir(f'{path}\dir_{i}') + except FileNotFoundError: + print('Такая директория не существует') + +# Задача-2: +# Напишите скрипт, отображающий папки текущей директории. + + list_dir = [obj for obj in os.listdir() if os.path.isdir(obj)] + print('\n'.join(list_dir)) + +# Задача-3: +# Напишите скрипт, создающий копию файла, из которого запущен данный скрипт. + + import sys + from shutil import copyfile + + path = sys.argv[0] + name, ext = os.path.splitext(path) + copy_path = f'{name}_copy{ext}' + try: + copyfile(path, copy_path) + except: + print('Не могу сделать копию файла') diff --git a/lesson6-easy.py b/lesson6-easy.py new file mode 100644 index 0000000..f0d0eb0 --- /dev/null +++ b/lesson6-easy.py @@ -0,0 +1,138 @@ +# Задача - 1 +# Опишите несколько классов TownCar, SportCar, WorkCar, PoliceCar +# У каждого класса должны быть следующие аттрибуты: +# speed, color, name, is_police - Булево значение. +# А так же несколько методов: go, stop, turn(direction) - которые должны сообщать, +# о том что машина поехала, остановилась, повернула(куда) + +class TownCar: + def __init__(self): + self.speed = 60 + self.color = 'green' + self.name = 'TownCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + + def go(self): + print('go') + + def stop(self): + print('stop') + + def turn(self, direction): + print(f'turn {direction}'); + +class SportCar: + def __init__(self): + self.speed = 100 + self.color = 'red' + self.name = 'SportCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + + def go(self): + print('go') + + def stop(self): + print('stop') + + def turn(self, direction): + print(f'turn {direction}'); + +class WorkCar: + def __init__(self): + self.speed = 60 + self.color = 'blue' + self.name = 'WorkCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + + def go(self): + print('go') + + def stop(self): + print('stop') + + def turn(self, direction): + print(f'turn {direction}'); + +class PoliceCar: + def __init__(self): + self.speed = 100 + self.color = 'white' + self.name = 'PoliceCar' + self.is_police = True + print(self.name, self.color, self.speed, self.is_police) + + def go(self): + print('go') + + def stop(self): + print('stop') + + def turn(self, direction): + print(f'turn {direction}'); + +my_town_car = TownCar() +my_sport_car = SportCar() +my_work_car = WorkCar() +my_police_car = PoliceCar() + +my_town_car.go() +my_town_car.turn('left') +my_town_car.stop() + +# Задача - 2 +# Посмотрите на задачу-1 подумайте как выделить общие признаки классов +# в родительский и остальные просто наследовать от него. + +class Car: + def go(self): + print('go') + + def stop(self): + print('stop') + + def turn(self, direction): + print(f'turn {direction}'); + +class TownCar(Car): + def __init__(self): + self.speed = 60 + self.color = 'green' + self.name = 'TownCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + +class SportCar(Car): + def __init__(self): + self.speed = 100 + self.color = 'red' + self.name = 'SportCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + +class WorkCar(Car): + def __init__(self): + self.speed = 60 + self.color = 'blue' + self.name = 'WorkCar' + self.is_police = False + print(self.name, self.color, self.speed, self.is_police) + +class PoliceCar(Car): + def __init__(self): + self.speed = 100 + self.color = 'white' + self.name = 'PoliceCar' + self.is_police = True + print(self.name, self.color, self.speed, self.is_police) + +my_town_car = TownCar() +my_sport_car = SportCar() +my_work_car = WorkCar() +my_police_car = PoliceCar() + +my_town_car.go() +my_town_car.turn('left') +my_town_car.stop() \ No newline at end of file diff --git a/lesson6-normal.py b/lesson6-normal.py new file mode 100644 index 0000000..c7643b2 --- /dev/null +++ b/lesson6-normal.py @@ -0,0 +1,61 @@ +# Задача - 1 +# Ранее мы с вами уже писали игру, используя словари в качестве +# структур данных для нашего игрока и врага, давайте сделаем новую, но уже с ООП +# Опишите базовый класс Person, подумайте какие общие данные есть и у врага и у игрока +# Не забудьте, что у них есть помимо общих аттрибутов и общие методы. +# Теперь наследуясь от Person создайте 2 класса Player, Enemy. +# У каждой сущности должы быть аттрибуты health, damage, armor +# У каждой сущности должно быть 2 метода, один для подсчета урона, с учетом брони противника, +# второй для атаки противника. +# Функция подсчета урона должна быть инкапсулирована +# Вам надо описать игровой цикл так же через класс. +# Создайте экземпляры классов, проведите бой. Кто будет атаковать первым оставляю на ваше усмотрение. + +class Person: + def __init__(self, name): + self.name = name + # Функция для подсчета урона + def _calculate_damage(self, armor): + return self.damage // armor + # Функция атаки, принимает на вход 2 структуры + def attack(self, defend): + damage = self._calculate_damage(defend.armor) + defend.health -= damage + print('{} нанес {} урона {}, у того осталось {} жизней.'.format(self.name, defend.name, damage, defend.health)) + +class Player(Person): + def __init__ (self, name): + super().__init__(name) + self.health = 100 + self.damage = 50 + self.armor = 0.7 +class Enemy(Person): + def __init__ (self, name): + super().__init__(name) + self.health = 100 + self.damage = 50 + self.armor = 0.7 + + +# Функция старта игры, никаких аргументов не принимает. +def start_game(): + # получаем наши структуры, через вышеописанную функцию + player = Player('Player') + enemy = Enemy('Enemy') + + # Запоминаем кто последний атаковал + last_attacker = player + while player.health > 0 and enemy.health > 0: + if last_attacker == player: + enemy.attack(player) + last_attacker = enemy + else: + player.attack(enemy) + last_attacker = player + + if player.health > 0: + print('Игрок победил!') + else: + print('Враг победил!') + +start_game() diff --git a/lesson7.py b/lesson7.py new file mode 100644 index 0000000..baf662f --- /dev/null +++ b/lesson7.py @@ -0,0 +1,135 @@ +import random + +class Card: + def __init__(self, max): + self._point = 0 # счётчик, количество набранных очков (зачёркнутых цифр) + self._l_number = [] + if max > 15: + self._max = max # максимальное количество бочонков + else: + self._max = 15 + self._l_number = self._init_l_number() # список цифр карты + + @property + def l_number(self): + return l_number + + def check_digit(self, digit): # проверка принадлежности бачонка с цифрй к карте + if digit in self._l_number: + self._l_number[self._l_number.index(digit)] = '-' + return True + + def add_point(self): # метод инкриментрующий счётчик подсчёта заччёркнутых цифр + self._point += 1 + + @property + def point(self): # метод, возвращающий количество зачёркнутых цифр + return self._point + + def check_point(self): # метод, проверяющий, все ли цифры вычеркнуты из карты + return self._point == 15 + + def _init_l_number(self): # инициализация карты + list = [] + for _ in range(3): # цикл по строкам + l_index_excluded = [] + for _ in range(4): # генерируем индексы 4ёх исключений для строки + while True: + e = random.randint(0, 8) + if e not in l_index_excluded: + break + l_index_excluded.append(e) + for j in range(9): # цикл по столбцам + if j in l_index_excluded: + n = ' ' + else: + while True: + n = random.randint(1, self._max) + if n not in list: + break + list.append(n) + return list + + def show(self): # вывод текущего состояния карты на экран + print(f'{self.name}'.center(26, '-')) + for i, d in enumerate(self._l_number): + print(str(d).rjust(2, ' '), end = ' ') + if (i + 1) % 9 == 0: + print() + print('--------------------------') + +class PlayerCard(Card): + def __init__(self, max): + super().__init__(max) + self.name = 'Карточка игрока' + +class ComputerCard(Card): + def __init__(self, max): + super().__init__(max) + self.name = 'Карточка компьютера' + +class Game: + def __init__(self, max = 90): + if max > 15: + self._max = max # максимальное количество бочонков + else: + self._max = 15 + self._ost = max # счётчик оставшхся бочонков + self._out_num = [] # список бочонков, которые уже в игре + + def _gen_key(self): # генератор следующего бочонка + while True: + i = random.randint(1, self._max) + if i not in self._out_num: + self._out_num.append(i) + self._ost -= 1 + return i + + def start(self): # старт игры + p_card = PlayerCard(self._max) + c_card = ComputerCard(self._max) + + while True: + print(f'Счёт {p_card.point}:{c_card.point}') + key = self._gen_key() + print(f'Новый бочонок: {key} (осталось {self._ost})') + p_card.show() + c_card.show() + + while True: + inp = input('Зачеркнуть цифру? (y/n)') + if inp in ['n', 'y']: + break + else: + print('Ошшибка ввода') + continue + + if inp == 'y': + if p_card.check_digit(key): + p_card.add_point() + else: + print('Вы ошиблись, игра закончена') + break + elif inp == 'n': + if p_card.check_digit(key): + print('Вы ошиблись, игра закончена') + break + + if c_card.check_digit(key): + c_card.add_point() + + p_cp = p_card.check_point() + c_cp = c_card.check_point() + + if p_cp and c_cp: + print('Ничья') + break + elif p_cp: + print('Игрок выиграл') + break + elif c_cp: + print('Компьютер выиграл') + break + +game = Game() +game.start() \ No newline at end of file diff --git a/lesson8.txt b/lesson8.txt new file mode 100644 index 0000000..099dd61 --- /dev/null +++ b/lesson8.txt @@ -0,0 +1 @@ +;-) \ No newline at end of file