From 924f579869a3a8d14621f5ba8981bcaec29f039c Mon Sep 17 00:00:00 2001 From: MINTCanella Date: Sun, 16 Jun 2024 19:50:44 +0300 Subject: [PATCH] All practice --- tasks/practice1/practice1.py | 4 ++-- tasks/practice2/practice2.py | 25 +++++++++++++++++++------ tasks/practice3/practice3.py | 33 ++++++++++++++++++++++++--------- tasks/practice4/practice4.py | 14 +++++++++++++- tasks/practice5/employee.py | 25 +++++++++++++++++++------ tasks/practice5/team.py | 20 ++++++++++++++++---- 6 files changed, 93 insertions(+), 28 deletions(-) diff --git a/tasks/practice1/practice1.py b/tasks/practice1/practice1.py index 030da70..23b7f71 100644 --- a/tasks/practice1/practice1.py +++ b/tasks/practice1/practice1.py @@ -8,7 +8,7 @@ def concatenate_strings(a: str, b: str) -> str: :return: результат сложения """ - # пиши свой код здесь + result = a + b return result @@ -22,6 +22,6 @@ def calculate_salary(total_compensation: int) -> float: :return: сумма заплаты после вычета налога """ - # пиши свой код здесь + result = total_compensation - total_compensation * 0.13 return result diff --git a/tasks/practice2/practice2.py b/tasks/practice2/practice2.py index 008f6d1..bfb8d1c 100644 --- a/tasks/practice2/practice2.py +++ b/tasks/practice2/practice2.py @@ -1,3 +1,5 @@ +import random +import re from typing import Iterable UNCULTURED_WORDS = ('kotleta', 'pirog') @@ -12,7 +14,7 @@ def greet_user(name: str) -> str: :return: приветствие """ - # пиши код здесь + greeting = f"Доброго времени суток, {name}!" return greeting @@ -28,7 +30,7 @@ def get_amount() -> float: :return: случайную сумму на счете """ - # пиши код здесь + amount = round(random.uniform(100, 1000000), 2) return amount @@ -42,7 +44,13 @@ def is_phone_correct(phone_number: str) -> bool: False - если номер некорректный """ - # пиши код здесь + pattern = r"^\+7\d{10}$" + + if re.match(pattern, phone_number): + result = True + else: + result = False + return result @@ -58,7 +66,7 @@ def is_amount_correct(current_amount: float, transfer_amount: str) -> bool: False - если денег недостаточно """ - # пиши код здесь + result = current_amount >= float(transfer_amount) return result @@ -77,7 +85,11 @@ def moderate_text(text: str, uncultured_words: Iterable[str]) -> str: :return: текст, соответсвующий правилам """ - # пиши код здесь + result = text.strip().capitalize() + result = ' '.join(result.split()) + result = result.replace("'", "").replace('"', "") + for word in uncultured_words: + result = result.replace(word, "#" * len(word)) return result @@ -100,5 +112,6 @@ def create_request_for_loan(user_info: str) -> str: :return: текст кредитной заявки """ - # пиши код здесь + parser = user_info.split(',') + result = f"Фамилия: {parser[0]}\nИмя: {parser[1]}\nОтчество: {parser[2]}\nДата рождения: {parser[3]}\nЗапрошенная сумма: {parser[4]}" return result diff --git a/tasks/practice3/practice3.py b/tasks/practice3/practice3.py index 9115c9c..03094f3 100644 --- a/tasks/practice3/practice3.py +++ b/tasks/practice3/practice3.py @@ -1,3 +1,5 @@ +import csv +import re from pathlib import Path from typing import Dict, Any, List, Optional @@ -26,9 +28,11 @@ def count_words(text: str) -> Dict[str, int]: значение - количество вхождений слов в текст """ - # пиши свой код здесь - - return {} + words = re.findall(r'\b[a-zA-Z]+\b', text.lower()) + result = {} + for word in words: + result[word] = result.get(word, 0) + 1 + return result def exp_list(numbers: List[int], exp: int) -> List[int]: @@ -40,9 +44,11 @@ def exp_list(numbers: List[int], exp: int) -> List[int]: :return: список натуральных чисел """ - # пиши свой код здесь + result = [] + for number in numbers: + result.append(number ** exp) - return [] + return result def get_cashback(operations: List[Dict[str, Any]], special_category: List[str]) -> float: @@ -58,6 +64,12 @@ def get_cashback(operations: List[Dict[str, Any]], special_category: List[str]) :return: размер кешбека """ + result = 0 + for operation in operations: + if operation['category'] in special_category: + result += operation['amount'] * 0.05 + else: + result += operation['amount'] * 0.01 return result @@ -98,7 +110,10 @@ def csv_reader(header: str) -> int: :param header: название заголовка :return: количество уникальных элементов в столбце """ - - # пиши свой код здесь - - return 0 + unique_elements = set() + with open(get_path_to_file(), 'r') as file: + reader = csv.DictReader(file) + for row in reader: + unique_elements.add(row[header]) + result = len(unique_elements) + return result diff --git a/tasks/practice4/practice4.py b/tasks/practice4/practice4.py index a7d6b8d..4f53858 100644 --- a/tasks/practice4/practice4.py +++ b/tasks/practice4/practice4.py @@ -38,6 +38,18 @@ def search_phone(content: Any, name: str) -> Optional[str]: :return: номер телефона пользователя или None """ - # пиши свой код здесь + if isinstance(content, list): + for item in content: + result = search_phone(item, name) + if result: + return result + + if isinstance(content, dict): + if content.get("name") and content.get("name") == name: + return content.get("phone") + for item in content.values(): + result = search_phone(item, name) + if result: + return result return None diff --git a/tasks/practice5/employee.py b/tasks/practice5/employee.py index 1d7bad8..748a714 100644 --- a/tasks/practice5/employee.py +++ b/tasks/practice5/employee.py @@ -38,14 +38,19 @@ def __init__(self, name: str, position: str, salary: int): Задача: реализовать конструктор класса, чтобы все тесты проходили """ - # пиши свой код здесь + if not isinstance(salary, int): + raise ValueError() + + self.name = name + self.position = position + self._salary = salary def get_salary(self) -> int: """ Метод возвращает зарплату сотрудника. """ - # пиши свой код здесь + return self._salary def __eq__(self, other: object) -> bool: """ @@ -55,7 +60,13 @@ def __eq__(self, other: object) -> bool: Если что-то идет не так - бросаются исключения. Смотрим что происходит в тестах. """ - # пиши свой код здесь + if not isinstance(other, Employee): + raise TypeError() + try: + result = get_position_level(self.position) == get_position_level(other.position) + return result + except NoSuchPositionError: + raise ValueError def __str__(self): """ @@ -63,7 +74,8 @@ def __str__(self): Пример вывода: 'name: Ivan position manager' """ - # пиши свой код здесь + result = f"name: {self.name} position: {self.position}" + return result def __hash__(self): return id(self) @@ -82,7 +94,8 @@ def __init__(self, name: str, salary: int, language: str): Задача: реализовать конструктор класса, используя конструктор родителя """ - # пиши свой код здесь + super().__init__(name, "developer", salary) + self.language = language class Manager(Employee): @@ -97,4 +110,4 @@ def __init__(self, name: str, salary: int): Задача: реализовать конструктор класса, используя конструктор родителя """ - # пиши свой код здесь + super().__init__(name, "manager", salary) diff --git a/tasks/practice5/team.py b/tasks/practice5/team.py index 934796c..91696e0 100644 --- a/tasks/practice5/team.py +++ b/tasks/practice5/team.py @@ -27,7 +27,9 @@ def __init__(self, name: str, manager: Manager): и инициализировать контейнер `__members` """ - # пиши свой код здесь + self.name = name + self.manager = manager + self.__members = set() def add_member(self, member: Employee) -> None: """ @@ -35,7 +37,9 @@ def add_member(self, member: Employee) -> None: Добавить можно только работника. """ - # пиши свой код здесь + if not isinstance(member, Employee): + raise TypeError() + self.__members.add(member) def remove_member(self, member: Employee) -> None: """ @@ -43,7 +47,12 @@ def remove_member(self, member: Employee) -> None: Если в команде нет такого участника поднимается исключение `NoSuchMemberError` """ - # пиши свой код здесь + if not isinstance(member, Employee): + raise TypeError() + try: + self.__members.remove(member) + except KeyError: + raise NoSuchMemberError(self.name, member) def get_members(self) -> Set[Employee]: """ @@ -51,7 +60,10 @@ def get_members(self) -> Set[Employee]: чтобы из вне нельзя было поменять список участников внутри класса """ - # пиши свой код здесь + return self.__members.copy() + + def __str__(self): + return f'team: {self.name} manager: {self.manager.name} number of members: {len(self.__members)}' def show(self) -> None: """