diff --git a/tasks/practice1/practice1.py b/tasks/practice1/practice1.py index 030da70..cc11823 100644 --- a/tasks/practice1/practice1.py +++ b/tasks/practice1/practice1.py @@ -1,4 +1,5 @@ def concatenate_strings(a: str, b: str) -> str: + result = a + b """ Функция для сложения двух строк. Результат сложения запишите в переменную result. @@ -21,7 +22,7 @@ def calculate_salary(total_compensation: int) -> float: :param total_compensation: сумма зарплаты до вычета налога :return: сумма заплаты после вычета налога """ - + result = total_compensation * 0.87 # пиши свой код здесь return result diff --git a/tasks/practice2/practice2.py b/tasks/practice2/practice2.py index 008f6d1..e8bbc77 100644 --- a/tasks/practice2/practice2.py +++ b/tasks/practice2/practice2.py @@ -1,9 +1,12 @@ +import re from typing import Iterable +import random UNCULTURED_WORDS = ('kotleta', 'pirog') def greet_user(name: str) -> str: + greeting = "Hello " + name """ Генерирует приветственную фразу. Приветствие не может состоять только из одного имени пользователя. @@ -17,6 +20,7 @@ def greet_user(name: str) -> str: def get_amount() -> float: + """ Генерируем случайную сумму на счете. @@ -27,8 +31,7 @@ def get_amount() -> float: :return: случайную сумму на счете """ - - # пиши код здесь + amount = round(random.uniform(100, 1000000), 2) return amount @@ -42,8 +45,9 @@ def is_phone_correct(phone_number: str) -> bool: False - если номер некорректный """ - # пиши код здесь - return result + pattern = r'\+7\d{10}' # Паттерн для поиска номера в формате +7xxxxxxxxxx + match = re.fullmatch(pattern, phone_number) + return bool(match) def is_amount_correct(current_amount: float, transfer_amount: str) -> bool: @@ -59,46 +63,33 @@ def is_amount_correct(current_amount: float, transfer_amount: str) -> bool: """ # пиши код здесь - return result + return current_amount >= float(transfer_amount) def moderate_text(text: str, uncultured_words: Iterable[str]) -> str: - """ - Модерирует текст по следующим правилам. + text = text.lower() + text = ' '.join(text.split()) - Требования к тексту: - - Первая буква заглавная, остальные буквы только в нижнем регистре - - отсутствую лишние пробелы - - фильтруются 'опасные' символы: " ' (двойные и одинарные кавычки) - - слова, перечисленные в переменной uncultured_words заменяются на аналогичное количество знаков # + text = text.replace('pirog', '#####').replace("kotleta", '#######') + text = text.replace('"', '').replace("'", '') - :param text: исходный текст - :param uncultured_words: список запрещенных слов - :return: текст, соответсвующий правилам - """ + text = text.capitalize() - # пиши код здесь - return result + return text def create_request_for_loan(user_info: str) -> str: - """ - Генерирует заявку на кредит на основе входящей строки. - Формат входящий строки: - - Иванов,Петр,Сергеевич,01.01.1991,10000 - - Что должны вернуть на ее основе: - - Фамилия: Иванов - Имя: Петр - Отчество: Сергеевич - Дата рождения: 01.01.1991 - Запрошенная сумма: 10000 - - :param user_info: строка с информацией о клиенте - :return: текст кредитной заявки - """ + info_list = user_info.split(',') - # пиши код здесь - return result + if len(info_list) != 5: + return "Некорректный формат информации о клиенте" + + last_name = info_list[0] + first_name = info_list[1] + middle_name = info_list[2] + dob = info_list[3] + loan_amount = info_list[4] + + request_text = f"Фамилия: {last_name}\nИмя: {first_name}\nОтчество: {middle_name}\nДата рождения: {dob}\nЗапрошенная сумма: {loan_amount}" + + return request_text diff --git a/tasks/practice3/practice3.py b/tasks/practice3/practice3.py index 9115c9c..538bcb9 100644 --- a/tasks/practice3/practice3.py +++ b/tasks/practice3/practice3.py @@ -1,6 +1,6 @@ from pathlib import Path from typing import Dict, Any, List, Optional - +import csv def count_words(text: str) -> Dict[str, int]: """ @@ -28,7 +28,16 @@ def count_words(text: str) -> Dict[str, int]: # пиши свой код здесь - return {} + result = dict() + for w in text.split(): + word = w.lower() + word = word.replace(",", '').replace(".", '').replace("!", "").replace("?", '') + if word.isalpha(): + if word in result: + result[word] += 1 + else: + result[word] = 1 + return result def exp_list(numbers: List[int], exp: int) -> List[int]: @@ -39,13 +48,21 @@ def exp_list(numbers: List[int], exp: int) -> List[int]: :param exp: в какую степень возвести числа в списке :return: список натуральных чисел """ - + arr = [] + for i in numbers: + arr.append(i ** exp) # пиши свой код здесь - return [] + return arr def get_cashback(operations: List[Dict[str, Any]], special_category: List[str]) -> float: + res = 0 + for d in operations: + if d["category"] in special_category: + res += d["amount"] * 0.05 + else: + res += d["amount"] * 0.01 """ Функция для расчета кешбека по операциям. За покупки в обычных категориях возвращается 1% от стоимости покупки @@ -58,7 +75,7 @@ def get_cashback(operations: List[Dict[str, Any]], special_category: List[str]) :return: размер кешбека """ - return result + return res def get_path_to_file() -> Optional[Path]: @@ -98,7 +115,10 @@ def csv_reader(header: str) -> int: :param header: название заголовка :return: количество уникальных элементов в столбце """ + result = set() # Создаем пустое множество для хранения уникальных элементов + with open(get_path_to_file(), newline='') as file: + f = csv.DictReader(file) + for row in f: + result.add(row[header]) - # пиши свой код здесь - - return 0 + return len(result) diff --git a/tasks/practice4/practice4.py b/tasks/practice4/practice4.py index a7d6b8d..93be4ca 100644 --- a/tasks/practice4/practice4.py +++ b/tasks/practice4/practice4.py @@ -2,6 +2,21 @@ def search_phone(content: Any, name: str) -> Optional[str]: + if type(content) == dict: + if "name" in content and "phone" in content and content["name"] == name: + return content["phone"] + for cont in content.values(): + res = search_phone(cont, name) + if res is not None: + return res + + elif type(content) == list: + for cont in content: + res = search_phone(cont, name) + if res is not None: + return res + return None + """ Функция поиска номера телефона пользователя в структуре данных. diff --git a/tasks/practice5/employee.py b/tasks/practice5/employee.py index 1d7bad8..1ad904b 100644 --- a/tasks/practice5/employee.py +++ b/tasks/practice5/employee.py @@ -39,6 +39,12 @@ def __init__(self, name: str, position: str, salary: int): """ # пиши свой код здесь + if type(name) == str and type(position) == str and type(salary) == int: + self.name = name + self.position = position + self._salary = salary + else: + raise ValueError def get_salary(self) -> int: """ @@ -46,6 +52,7 @@ def get_salary(self) -> int: """ # пиши свой код здесь + return self._salary def __eq__(self, other: object) -> bool: """ @@ -56,6 +63,14 @@ def __eq__(self, other: object) -> bool: """ # пиши свой код здесь + if type(other) != Employee: + raise TypeError + + try: + return get_position_level(other.position) == get_position_level(self.position) + except NoSuchPositionError as e: + raise ValueError from e + def __str__(self): """ @@ -64,6 +79,7 @@ def __str__(self): """ # пиши свой код здесь + return f"name: {self.name} position: {self.position}" def __hash__(self): return id(self) @@ -83,6 +99,8 @@ def __init__(self, name: str, salary: int, language: str): """ # пиши свой код здесь + self.language = language + super().__init__(name, self.position, salary) class Manager(Employee): @@ -98,3 +116,4 @@ def __init__(self, name: str, salary: int): """ # пиши свой код здесь + super().__init__(name, self.position, salary) diff --git a/tasks/practice5/team.py b/tasks/practice5/team.py index 934796c..e1fabf5 100644 --- a/tasks/practice5/team.py +++ b/tasks/practice5/team.py @@ -28,6 +28,12 @@ def __init__(self, name: str, manager: Manager): """ # пиши свой код здесь + if type(manager) != Manager or type(name) != str: + raise TypeError + self.name = name + self.manager = manager + self.__members = set() + def add_member(self, member: Employee) -> None: """ @@ -36,6 +42,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: """ @@ -44,6 +53,13 @@ def remove_member(self, member: Employee) -> None: """ # пиши свой код здесь + if not isinstance(member, Employee): + raise TypeError + + if member in self.__members: + self.__members.remove(member) + else: + raise NoSuchMemberError(self.name, member) def get_members(self) -> Set[Employee]: """ @@ -52,6 +68,11 @@ def get_members(self) -> Set[Employee]: """ # пиши свой код здесь + set_copy = self.__members.copy() + return set_copy + + def __str__(self): + return f"team: {self.name} manager: {self.manager.name} number of members: {len(self.__members)}" def show(self) -> None: """