diff options
| -rw-r--r-- | day3/task1/README.md | 18 | ||||
| -rw-r--r-- | day3/task4/task4.py | 56 | ||||
| -rw-r--r-- | day4/task1/task1.py | 4 | ||||
| -rw-r--r-- | day5/task1/task1.py | 20 | ||||
| -rw-r--r-- | day5/task2/task2.py | 31 | ||||
| -rw-r--r-- | day5/task3/task3.py | 29 | ||||
| -rw-r--r-- | day6/task1/task1.py | 5 | ||||
| -rw-r--r-- | day6/task2/task2.py | 7 | ||||
| -rw-r--r-- | day6/task3/task3.py | 35 |
9 files changed, 205 insertions, 0 deletions
diff --git a/day3/task1/README.md b/day3/task1/README.md new file mode 100644 index 0000000..5e3ef67 --- /dev/null +++ b/day3/task1/README.md @@ -0,0 +1,18 @@ +# JSON + +Является независимым подмножеством языка Javascript, которое сегодня можно сериализовать/десериализовать практически в +любом языке программирования. + +В сравнении с XML является более лаконичным из-за чего может быть более подходящим для передачи сложных структур по +сети (снижение используемого трафика). + +Является подмножеством YAML. + +# YAML + +Является надмножеством JSON из-за чего включает в себя все его положительные стороны. Концептуально близок к языкам +разметки, но ориентированный на удобство ввода-вывода типичных структур данных многих языков программирования. + +# XML +Язык разметки, разработанный W3C. Во многом многословен из-за чего может оказаться невыгодным для передачи небольших +структур данных по сети, но становится более удобным и эффективным при росте размера и сложности документа. diff --git a/day3/task4/task4.py b/day3/task4/task4.py new file mode 100644 index 0000000..b02f1fa --- /dev/null +++ b/day3/task4/task4.py @@ -0,0 +1,56 @@ +import re +from datetime import datetime + +f = open('otrs_error.log') + +matcher = re.compile(r'\[(?P<date>.*?)\]\[(?P<type>.*?)\]\[(?P<module>.*?)\]\[(?P<id>.*?)\] (?P<text>.*)') + +match_date_low = datetime(2017, 8, 6, 10, 0) +match_date_high = datetime(2017, 8, 6, 19, 0) +count_module = 'Kernel::System::Ticket::TicketPermission' +counter = 0 + +errors_by_module = {} +errors_by_date = {} + +lines = f.readlines() +for line in lines: + line = line.strip() + match = re.match(matcher, line) + + if match: + try: + date = datetime.strptime(match.group('date'), '%c') + except ValueError: + print(f'Ошибка при разборе строки (Неверный формат даты):\n{line}') + continue + + module = match.group('module') + + if match_date_low <= date <= match_date_high and module == count_module: + counter += 1 + + errors_by_module[module] = errors_by_module.get(module, 0) + 1 + + err_date = datetime(date.year, date.month, date.day) + errors_by_date[err_date] = errors_by_date.get(err_date, []) + [{ + 'date': date, + 'type': match.group('type'), + 'module': module, + 'id': match.group('id'), + 'text': match.group('text') + }] + + else: + print(f'Ошибка при разборе строки:\n{line}') + +print(f'За период с {match_date_low} по {match_date_high} в модуле "{count_module}" произошло {counter} ошибок') + +for module, count in sorted(errors_by_module.items(), key=lambda p: p[1], reverse=True): + print(f'В модуле {module} за все время произошло {count} ошибок') + +for date, errors in errors_by_date.items(): + # Дополняем дни и месяцы до ширины 2 с помощью нулей слева + with open(f'{str(date.day).rjust(2, "0")}.{str(date.month).rjust(2, "0")}.{date.year}.txt', 'w') as f: + for error in errors: + f.write(f"[{date.ctime()}][{error['type']}][{error['module']}][{error['id']}] {error['text']}\n") diff --git a/day4/task1/task1.py b/day4/task1/task1.py new file mode 100644 index 0000000..7b16685 --- /dev/null +++ b/day4/task1/task1.py @@ -0,0 +1,4 @@ +import re + +s = 'this =- is , bad ! text #$%^123%^' +print(re.sub(r'[^a-zA-Zа-яА-ЯёЁ]', ' ', s)) diff --git a/day5/task1/task1.py b/day5/task1/task1.py new file mode 100644 index 0000000..19aee5b --- /dev/null +++ b/day5/task1/task1.py @@ -0,0 +1,20 @@ +def ingredients(func): + def wrapper(*args, **kwargs): + _ingredients = ['хлеб', 'кетчуп', 'сыр'] + for ingredient in _ingredients: + print('---%s---' % ingredient) + + func(*args, **kwargs) + + for ingredient in _ingredients[::-1]: + print('---%s---' % ingredient) + + return wrapper + + +@ingredients +def main_ingredient(meat): + print('---%s---' % meat) + + +main_ingredient('ветчина') diff --git a/day5/task2/task2.py b/day5/task2/task2.py new file mode 100644 index 0000000..e54b4a3 --- /dev/null +++ b/day5/task2/task2.py @@ -0,0 +1,31 @@ +def bread(func): + def wrapper(*args, **kwargs): + print('---хлеб---') + + func(*args, **kwargs) + + print('---хлеб---') + + return wrapper + + +def ingredients(func): + def wrapper(*args, **kwargs): + for ingredient in ['кетчуп', 'сыр']: + print('---%s---' % ingredient) + + func(*args, **kwargs) + + for ingredient in ['кетчуп', 'сыр'][::-1]: + print('---%s---' % ingredient) + + return wrapper + + +@bread +@ingredients +def main_ingredient(meat): + print('---%s---' % meat) + + +main_ingredient('ветчина') diff --git a/day5/task3/task3.py b/day5/task3/task3.py new file mode 100644 index 0000000..d3006e5 --- /dev/null +++ b/day5/task3/task3.py @@ -0,0 +1,29 @@ +# Оригинал +""" +def decor(some_params): + def wrapper(pr_function_like_an_arg): + print(some_params) + return pr_function_like_an_arg + + return wrapper + + +@decor('some_params') +def pr_function(): + print(' hi! ') + + +print('---') + + +pr_function() +""" + + +def pr_function(): + print(' hi! ') + + +print('some_params') +print('---') +pr_function() diff --git a/day6/task1/task1.py b/day6/task1/task1.py new file mode 100644 index 0000000..af3afbf --- /dev/null +++ b/day6/task1/task1.py @@ -0,0 +1,5 @@ +try: + a = int(input()) + print(100 / a) +except: + print('ошибка ввода') diff --git a/day6/task2/task2.py b/day6/task2/task2.py new file mode 100644 index 0000000..a95feae --- /dev/null +++ b/day6/task2/task2.py @@ -0,0 +1,7 @@ +try: + a = input() + print(100 / int(a)) +except ValueError as e: + print(e) +except ZeroDivisionError as e: + print(e) diff --git a/day6/task3/task3.py b/day6/task3/task3.py new file mode 100644 index 0000000..5541d36 --- /dev/null +++ b/day6/task3/task3.py @@ -0,0 +1,35 @@ +def divide(a, b): + if a > b: + import hahaha + + # В задании указано, что строго меньше, + # поэтому не else, а elif a < b + elif a < b: + import sys + + # Проверяем остаток + div, mod = divmod(a, b) + if mod == 0: + return div + else: + raise ArithmeticError(f'{a / b}') + + +try: + a = int(input()) + b = int(input()) + result = divide(a, b) + +except ArithmeticError as e: + print(f'Результат деления с остатком: {e}') + +# В задании написано отлавливать в отдельных except, +# но язык позволяет использовать более разумный синтаксис +except (ValueError, ZeroDivisionError, ModuleNotFoundError) as e: + print(e) + +except: + print('Непредвиденная ошибка') + +else: + print(f'Поделили успешно, вот вам результат: {result}') |