diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef6795d --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Учебный проект. +## Это проект исключительно создан для сдачи домашнего задания. + + +## Установка +### 1. Скачайте архвив с [GitHub](https://github.com/Vladimir9645/PythonProject1) +#### 1.1 скопируйте SSH ключ +#### 1.2 перейдите в Pycharm найдите Clone repository и туда вставьте ссылку +### 2. Зарегеструйте аккаунт в [GitHub](github.com) + + + +## Описание +### В моем проекте на данный моменте находиться 2 домашние работы. +### 1. masks.py и widget.py где реализованы функции маски банковской карты +### 2. processing.py фильтрация списков diff --git a/main.py b/main.py index 5596b44..e69de29 100644 --- a/main.py +++ b/main.py @@ -1,16 +0,0 @@ -# This is a sample Python script. - -# Press Shift+F10 to execute it or replace it with your code. -# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. - - -def print_hi(name): - # Use a breakpoint in the code line below to debug your script. - print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint. - - -# Press the green button in the gutter to run the script. -if __name__ == '__main__': - print_hi('PyCharm') - -# See PyCharm help at https://www.jetbrains.com/help/pycharm/ diff --git a/src/masks.py b/src/masks.py index 7c56008..301ed17 100644 --- a/src/masks.py +++ b/src/masks.py @@ -1,8 +1,5 @@ -"""принимает на вход номер карты в виде числа и возвращает маску""" - - def get_mask_card_number(card_number: str) -> str: - """Функция входа номер карты в виде числа и возврата в виде маски """ + """Функция входа номер карты в виде числа и возврата в виде маски""" # Убираем все пробелы из переданной строки card_number = card_number.replace(" ", "") # Проверяем, что длина карты 16 символов и все символы цифры @@ -23,9 +20,6 @@ def get_mask_card_number(card_number: str) -> str: return f"{part1} {part2}{part2_mask} {part3_mask} {part4}" -"""Принимает на вход номер счета в виде числа и возвращает маску номера""" - - def get_mask_account(mask_account: str) -> str: """функция ввода номера счета и вывода с маской""" diff --git a/src/processing.py b/src/processing.py new file mode 100644 index 0000000..6d828bf --- /dev/null +++ b/src/processing.py @@ -0,0 +1,52 @@ +from datetime import datetime +from typing import Any, Dict, List + + +def filter_by_state(dictionary_1: List[Dict[str, Any]], state: str = "EXECUTED") -> List[Dict[str, Any]]: + """Фильтрует список словарей по значению ключа 'state'""" + return [item for item in dictionary_1 if item.get("state") == state] + + +def sort_by_date( + dictionary_2: List[Dict[str, Any]], + date_key: str = "date", + date_format: str = "%Y-%m-%dT%H:%M:%S.%f", + reverse: bool = True, +) -> List[Dict[str, Any]]: + """Сортирует список словарей по дате, учитывая формат даты с временем и миллисекундами""" + return sorted(dictionary_2, key=lambda d: datetime.strptime(d[date_key], date_format), reverse=reverse) + + +# код сортирует список словарей по дате, +# указанной в каждом словаре, +# в том порядке, который задаётся переменной reverse + + +# Исходный список словарей +dictionary = [ + {"id": 41428829, "state": "EXECUTED", "date": "2019-07-03T18:35:29.512364"}, + {"id": 939719570, "state": "EXECUTED", "date": "2018-06-30T02:08:58.425572"}, + {"id": 594226727, "state": "CANCELED", "date": "2018-09-12T21:27:25.241689"}, + {"id": 615064591, "state": "CANCELED", "date": "2018-10-14T08:21:33.419441"}, +] + +# Фильтруем словарь по состоянию 'EXECUTED' +filtered = filter_by_state(dictionary, "EXECUTED") +# Сортируем отфильтрованные данные по дате +sorted_filtered = sort_by_date(filtered) +# Выводим отсортированные данные для состояния 'EXECUTED' +print(sorted_filtered) + + +# Фильтруем словарь по состоянию 'CANCELED' +filtered = filter_by_state(dictionary, "CANCELED") +# Сортируем отфильтрованные данные по дате +sorted_filtered = sort_by_date(filtered) +# Выводим отсортированные данные для состояния 'CANCELED' +print(sorted_filtered) +# пустая строка +print() + +# Использование функции сортировки +sorted_events = sort_by_date(dictionary, "date") +print(sorted_events) diff --git a/src/widget.py b/src/widget.py index a2bb78d..f6c0be3 100644 --- a/src/widget.py +++ b/src/widget.py @@ -1,22 +1,17 @@ -"""Обрабатывает информацию как о картах, так и о счетах.""" +from datetime import datetime from src.masks import get_mask_account, get_mask_card_number -from datetime import datetime def mask_account_card(input_str: str) -> str: - - """ Принимает строку формата: + """Принимает строку формата: - "Visa Platinum 7000792289606361" - "Maestro 7000792289606361" - "Счет 73654108430135874305" - Возвращает строку с замаскированным номером. """ + Возвращает строку с замаскированным номером.""" - card_types = ['Maestro', 'MasterCard', - 'Visa Classic', 'Visa Platinum', - 'Visa Gold' - ] - account_types = ['Счет'] + card_types = ["Maestro", "MasterCard", "Visa Classic", "Visa Platinum", "Visa Gold"] + account_types = ["Счет"] input_str = input_str.strip() parts = input_str.split() @@ -41,12 +36,9 @@ def mask_account_card(input_str: str) -> str: print(mask_account_card("Счет 73654108430135874305")) -""" Принимает строку с датой в формате "2024-03-11T02:26:18.671407" -и возвращает строку с датой в формате "ДД.ММ.ГГГГ" """ - - def get_date(date_str: str) -> str: - """Принимает строку с датой в формает и возвращает строку с датой.""" + """ Принимает строку с датой в формате "2024-03-11T02:26:18.671407" +и возвращает строку с датой в формате "ДД.ММ.ГГГГ" """ # Переносим входную строку в объект datetime dt = datetime.fromisoformat(date_str) # Форматируем дату в нужный формат: День.Месяц.Год