diff --git a/lesson4-easy.py b/lesson4-easy.py new file mode 100644 index 0000000..938625f --- /dev/null +++ b/lesson4-easy.py @@ -0,0 +1,31 @@ +# Все задачи текущего блока решите с помощью генераторов списков! + +# Задание-1: +# Дан список, заполненный произвольными целыми числами. +# Получить новый список, элементы которого будут +# квадратами элементов исходного списка +# [1, 2, 4, 0] --> [1, 4, 16, 0] + +list_a = [1, 2, 4, 0] +list_b = [i**2 for i in list_a] +print(list_b) + +# Задание-2: +# Даны два списка фруктов. +# Получить список фруктов, присутствующих в обоих исходных списках. + +fruits1 = ["яблоко", "банан", "киви"] +fruits2 = ["банан", "киви", "арбуз"] +fruits3 = list(set(fruits1) & set(fruits2)) +print(fruits3) + +# Задание-3: +# Дан список, заполненный произвольными числами. +# Получить список из элементов исходного, удовлетворяющих следующим условиям: +# + Элемент кратен 3 +# + Элемент положительный +# + Элемент не кратен 4 + +list_a = [1, 3, 2, 4, 0, 9, -6, 12] +list_b = [i for i in list_a if i % 3 == 0 and i > 0 and i % 4 != 0] +print(list_b) \ No newline at end of file diff --git a/lesson4-normal.py b/lesson4-normal.py new file mode 100644 index 0000000..a29defb --- /dev/null +++ b/lesson4-normal.py @@ -0,0 +1,65 @@ +# Эти задачи необходимо решить используя регулярные выражения! + +# Задача - 1 +# Запросите у пользователя имя, фамилию, email. Теперь необходимо совершить проверки, имя и фамилия должны иметь заглавные первые буквы. +# email - не должен иметь заглавных букв и должен быть в формате: текст в нижнем регистре, допускается нижнее подчеркивание и цифры, потом @, потом текст, допускаются цифры, точка, ru или org или com. +# Например: +# Пупкин василий - неверно указано имя, te$T@test.net - неверно указан email (спецсимвол, заглавная буква, .net), te_4_st@test.com - верно указан. + +import re + +name = input('имя: ') +surname = input('фамилия: ') +email = input('email: ') + +if not re.match('[A-ZА-Я][A-Za-zА-Яа-я]+', name): + print('неверно указано имя') + +if not re.match('[A-ZА-Я][A-Za-zА-Яа-я]+', surname): + print('неверно указана фамилия') + +if not re.match('([a-z_0-9]+@[a-z0-9]+\.ru|org|com)', email): + print('неверно указан email') + +# Задача - 2: +# Вам дан текст: + +some_str = ''' +Мороз и солнце; день чудесный! +Еще ты дремлешь, друг прелестный — +Пора, красавица, проснись: +Открой сомкнуты негой взоры +Навстречу северной Авроры, +Звездою севера явись! +Вечор, ты помнишь, вьюга злилась, +На мутном небе мгла носилась; +Луна, как бледное пятно, +Сквозь тучи мрачные желтела, +И ты печальная сидела — +А нынче... погляди в окно: +Под голубыми небесами +Великолепными коврами, +Блестя на солнце, снег лежит; +Прозрачный лес один чернеет, +И ель сквозь иней зеленеет, +И речка подо льдом блестит. +Вся комната янтарным блеском +Озарена. Веселым треском +Трещит затопленная печь. +Приятно думать у лежанки. +Но знаешь: не велеть ли в санки +Кобылку бурую запречь? +Скользя по утреннему снегу, +Друг милый, предадимся бегу +Нетерпеливого коня +И навестим поля пустые, +Леса, недавно столь густые, +И берег, милый для меня.''' + +# Необходимо с помощью регулярных выражений определить есть ли в тексте подряд +# более одной точки, при любом исходе сообщите результат пользователю! + +if re.search('\.\.', some_str): + print('в тексте есть подряд более одной точки') +else: + print('в тексте нет подряд более одной точки') \ No newline at end of file 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