summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--day3/task4/task4.py56
-rw-r--r--day4/task1/task1.py4
-rw-r--r--day5/task1/task1.py20
-rw-r--r--day5/task2/task2.py31
-rw-r--r--day5/task3/task3.py29
-rw-r--r--day6/task1/task1.py5
-rw-r--r--day6/task2/task2.py7
-rw-r--r--day6/task3/task3.py35
8 files changed, 187 insertions, 0 deletions
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}')