From d43b50b6978e7f2b12502ac4d0e4498c326ac32a Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:29:20 +0300 Subject: [PATCH 01/12] 1 --- Lab_python/lab2/lab2.2/log.txt | 3 ++ Lab_python/lab2/lab2.2/task_1.py | 15 ++++++++++ Lab_python/lab2/lab2.2/task_2.py | 26 +++++++++++++++++ Lab_python/lab2/lab2.2/task_3.py | 24 +++++++++++++++ Lab_python/lab2/lab2.2/task_4.py | 50 ++++++++++++++++++++++++++++++++ Lab_python/lab2/lab2.2/task_5.py | 40 +++++++++++++++++++++++++ Lab_python/lab2/lab2.2/task_6.py | 28 ++++++++++++++++++ Lab_python/lab2/lab2.2/task_7.py | 37 +++++++++++++++++++++++ Lab_python/lab2/lab2.2/task_8.py | 27 +++++++++++++++++ Lab_python/lab2/lab2.2/task_9.py | 33 +++++++++++++++++++++ 10 files changed, 283 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/log.txt create mode 100644 Lab_python/lab2/lab2.2/task_1.py create mode 100644 Lab_python/lab2/lab2.2/task_2.py create mode 100644 Lab_python/lab2/lab2.2/task_3.py create mode 100644 Lab_python/lab2/lab2.2/task_4.py create mode 100644 Lab_python/lab2/lab2.2/task_5.py create mode 100644 Lab_python/lab2/lab2.2/task_6.py create mode 100644 Lab_python/lab2/lab2.2/task_7.py create mode 100644 Lab_python/lab2/lab2.2/task_8.py create mode 100644 Lab_python/lab2/lab2.2/task_9.py diff --git a/Lab_python/lab2/lab2.2/log.txt b/Lab_python/lab2/lab2.2/log.txt new file mode 100644 index 0000000..3cad4af --- /dev/null +++ b/Lab_python/lab2/lab2.2/log.txt @@ -0,0 +1,3 @@ +01:22:50 - calculate(5, 3, '+') +01:22:57 - calculate(5, 3, '+') +01:25:13 - calculate(10, 15, '+') diff --git a/Lab_python/lab2/lab2.2/task_1.py b/Lab_python/lab2/lab2.2/task_1.py new file mode 100644 index 0000000..d2a401b --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_1.py @@ -0,0 +1,15 @@ +def flatten_list(lst): + i = 0 + while i < len(lst): + if isinstance(lst[i], list): + flatten_list(lst[i]) + lst[i:i+1] = lst[i] + else: + i += 1 + +list_a = [1, 2, 3, [4], 5, [6, [7, [], 8, [9]]]] +print("Исходный список:") +print(list_a) +flatten_list(list_a) +print("Список после преобразования в плоский:") +print(list_a) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_2.py b/Lab_python/lab2/lab2.2/task_2.py new file mode 100644 index 0000000..d32c7fc --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_2.py @@ -0,0 +1,26 @@ +def merge_dicts(dict_a, dict_b): + for key, value in dict_b.items(): + if key in dict_a: + if isinstance(dict_a[key], dict) and isinstance(value, dict): + merge_dicts(dict_a[key], value) + else: + dict_a[key] = value + else: + dict_a[key] = value + +def main(): + print("Слияние словарей") + dict_a = {"a": 1, "b": {"c": 1, "f": 4}} + dict_b = {"d": 1, "b": {"c": 2, "e": 3}} + + print("Первый словарь (dict_a):") + print(dict_a) + print("Второй словарь (dict_b):") + print(dict_b) + + merge_dicts(dict_a, dict_b) + + print("Результат слияния (dict_a после объединения):") + print(dict_a) + +main() \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_3.py b/Lab_python/lab2/lab2.2/task_3.py new file mode 100644 index 0000000..874b861 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_3.py @@ -0,0 +1,24 @@ +import datetime + +def log_calls(filename): + def decorator(func): + def wrapper(*args, **kwargs): + time = datetime.datetime.now().strftime("%H:%M:%S") + args_str = str(args)[1:-1] + log_line = f"{time} - {func.__name__}({args_str})\n" + + with open(filename, 'a') as f: + f.write(log_line) + + return func(*args, **kwargs) + return wrapper + return decorator + +@log_calls("log.txt") +def calculate(a, b, op='+'): + if op == '+': return a + b + if op == '-': return a - b + if op == '*': return a * b + return a / b + +calculate(10, 15, '+') \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_4.py b/Lab_python/lab2/lab2.2/task_4.py new file mode 100644 index 0000000..24f2c46 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_4.py @@ -0,0 +1,50 @@ +def transpose_matrix(matrix): + if not matrix or not matrix[0]: + return [] + + rows = len(matrix) + cols = len(matrix[0]) + + result = [] + for j in range(cols): + new_row = [] + for i in range(rows): + new_row.append(matrix[i][j]) + result.append(new_row) + + return result + +print("Транспонирование матрицы") +print("Введите матрицу построчно.") +print("Введите числа через пробел для каждой строки.") +print("Для завершения ввода введите пустую строку.") + +matrix = [] +row_number = 1 + +while True: + row_input = input(f"Строка {row_number}: ").strip() + + if not row_input: + break + + row = [int(x) for x in row_input.split()] + matrix.append(row) + row_number += 1 + +if not matrix: + print("Матрица пустая! Транспонирование невозможно.") +else: + print("Исходная матрица:") + for row in matrix: + print(row) + + transposed = transpose_matrix(matrix) + + print("Транспонированная матрица:") + for row in transposed: + print(row) + + print("Исходная матрица (не изменилась):") + for row in matrix: + print(row) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_5.py b/Lab_python/lab2/lab2.2/task_5.py new file mode 100644 index 0000000..594d98e --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_5.py @@ -0,0 +1,40 @@ +def cache(func): + cache_dict = {} + + def wrapper(*args, **kwargs): + key = str(args) + str(kwargs) + if key in cache_dict: + print(f"Результат взят из кэша для аргументов {args}") + return cache_dict[key] + else: + print(f"Вычисляем результат для аргументов {args}") + result = func(*args, **kwargs) + cache_dict[key] = result + print(f"Результат сохранен в кэш: {result}") + return result + + return wrapper + +@cache +def multiply(a, b): + result = a * b + print(f" Вычисление: {a} * {b} = {result}") + return result + +print("Демонстрация кэширования") + +print("Первый вызов multiply(5, 3):") +result1 = multiply(5, 3) +print(f"Результат: {result1}") + +print("Второй вызов multiply(5, 3):") +result2 = multiply(5, 3) +print(f"Результат: {result2}") + +print("Вызов multiply(4, 7):") +result3 = multiply(4, 7) +print(f"Результат: {result3}") + +print("Снова multiply(4, 7):") +result4 = multiply(4, 7) +print(f"Результат: {result4}") \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_6.py b/Lab_python/lab2/lab2.2/task_6.py new file mode 100644 index 0000000..c2352f6 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_6.py @@ -0,0 +1,28 @@ +def unique_elements(nested_list): + result = [] + + def extract_elements(lst): + for item in lst: + if isinstance(item, list): + extract_elements(item) + else: + is_duplicate = False + for existing_item in result: + if existing_item == item: + is_duplicate = True + break + if not is_duplicate: + result.append(item) + + extract_elements(nested_list) + return result + +list_a = [1, 2, 3, [4, 3, 1], 5, [6, [7, [10], 8, [9, 2, 3]]]] + +print("Исходный список:") +print(list_a) + +unique = unique_elements(list_a) + +print("Уникальные элементы:") +print(unique) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_7.py b/Lab_python/lab2/lab2.2/task_7.py new file mode 100644 index 0000000..448aa35 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_7.py @@ -0,0 +1,37 @@ +def merge_sorted_list(list1, list2): + result = [] + i = 0 + j = 0 + + while i < len(list1) and j < len(list2): + if list1[i] < list2[j]: + result.append(list1[i]) + i += 1 + else: + result.append(list2[j]) + j += 1 + + while i < len(list1): + result.append(list1[i]) + i += 1 + + while j < len(list2): + result.append(list2[j]) + j += 1 + + return result + +print("Введите первый отсортированный список (числа через пробел):") +input1 = input("Первый список: ") +list_a = [int(x) for x in input1.split()] + +print("Введите второй отсортированный список (числа через пробел):") +input2 = input("Второй список: ") +list_b = [int(x) for x in input2.split()] + +print("Первый список:", list_a) +print("Второй список:", list_b) + +merged = merge_sorted_list(list_a, list_b) + +print("Результат слияния:", merged) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_8.py b/Lab_python/lab2/lab2.2/task_8.py new file mode 100644 index 0000000..0eb4073 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_8.py @@ -0,0 +1,27 @@ +import time + +def timing(func): + def wrapper(*args, **kwargs): + start = time.time() + result = func(*args, **kwargs) + end = time.time() + time_ms = (end - start) * 1000 + print(f"Время выполнения '{func.__name__}': {time_ms:.2f} мс") + return result + return wrapper + +@timing +def test_slow(): + time.sleep(0.3) + return + +@timing +def test_fast(): + total = 0 + for i in range(100000): + total += i + return total + +print("Тест замера времени") +test_slow() +test_fast() \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_9.py b/Lab_python/lab2/lab2.2/task_9.py new file mode 100644 index 0000000..8434139 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_9.py @@ -0,0 +1,33 @@ +def type_check(*expected_types): + def decorator(func): + def wrapper(*args, **kwargs): + if len(args) != len(expected_types): + raise TypeError( + f"Функция '{func.__name__}' ожидает {len(expected_types)} " + f"аргументов, но получено {len(args)}" + ) + + for i, (arg, expected_type) in enumerate(zip(args, expected_types)): + if type(arg) is not expected_type: + raise TypeError( + f"Аргумент {i+1} функции '{func.__name__}' должен быть " + f"{expected_type.__name__}, получен {type(arg).__name__}" + ) + + return func(*args, **kwargs) + return wrapper + return decorator + +@type_check(int, int) +def multiply(a, b): + result = a * b + print(f"Результат: {a} * {b} = {result}") + return result + +print("Проверка типов параметров") + +print("Корректный вызов:") +multiply(4, 5) + +print("Некорректный вызов:") +multiply(4, "5") \ No newline at end of file From 7da3bbd849c2c3cd14daa7b70467486661289d10 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:41:04 +0300 Subject: [PATCH 02/12] 1 --- Lab_python/lab2/lab2.2/log.txt | 3 -- Lab_python/lab2/lab2.2/task_1.py | 15 ---------- Lab_python/lab2/lab2.2/task_2.py | 26 ----------------- Lab_python/lab2/lab2.2/task_3.py | 24 --------------- Lab_python/lab2/lab2.2/task_4.py | 50 -------------------------------- Lab_python/lab2/lab2.2/task_5.py | 40 ------------------------- Lab_python/lab2/lab2.2/task_6.py | 28 ------------------ Lab_python/lab2/lab2.2/task_7.py | 37 ----------------------- Lab_python/lab2/lab2.2/task_8.py | 27 ----------------- Lab_python/lab2/lab2.2/task_9.py | 33 --------------------- 10 files changed, 283 deletions(-) delete mode 100644 Lab_python/lab2/lab2.2/log.txt delete mode 100644 Lab_python/lab2/lab2.2/task_1.py delete mode 100644 Lab_python/lab2/lab2.2/task_2.py delete mode 100644 Lab_python/lab2/lab2.2/task_3.py delete mode 100644 Lab_python/lab2/lab2.2/task_4.py delete mode 100644 Lab_python/lab2/lab2.2/task_5.py delete mode 100644 Lab_python/lab2/lab2.2/task_6.py delete mode 100644 Lab_python/lab2/lab2.2/task_7.py delete mode 100644 Lab_python/lab2/lab2.2/task_8.py delete mode 100644 Lab_python/lab2/lab2.2/task_9.py diff --git a/Lab_python/lab2/lab2.2/log.txt b/Lab_python/lab2/lab2.2/log.txt deleted file mode 100644 index 3cad4af..0000000 --- a/Lab_python/lab2/lab2.2/log.txt +++ /dev/null @@ -1,3 +0,0 @@ -01:22:50 - calculate(5, 3, '+') -01:22:57 - calculate(5, 3, '+') -01:25:13 - calculate(10, 15, '+') diff --git a/Lab_python/lab2/lab2.2/task_1.py b/Lab_python/lab2/lab2.2/task_1.py deleted file mode 100644 index d2a401b..0000000 --- a/Lab_python/lab2/lab2.2/task_1.py +++ /dev/null @@ -1,15 +0,0 @@ -def flatten_list(lst): - i = 0 - while i < len(lst): - if isinstance(lst[i], list): - flatten_list(lst[i]) - lst[i:i+1] = lst[i] - else: - i += 1 - -list_a = [1, 2, 3, [4], 5, [6, [7, [], 8, [9]]]] -print("Исходный список:") -print(list_a) -flatten_list(list_a) -print("Список после преобразования в плоский:") -print(list_a) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_2.py b/Lab_python/lab2/lab2.2/task_2.py deleted file mode 100644 index d32c7fc..0000000 --- a/Lab_python/lab2/lab2.2/task_2.py +++ /dev/null @@ -1,26 +0,0 @@ -def merge_dicts(dict_a, dict_b): - for key, value in dict_b.items(): - if key in dict_a: - if isinstance(dict_a[key], dict) and isinstance(value, dict): - merge_dicts(dict_a[key], value) - else: - dict_a[key] = value - else: - dict_a[key] = value - -def main(): - print("Слияние словарей") - dict_a = {"a": 1, "b": {"c": 1, "f": 4}} - dict_b = {"d": 1, "b": {"c": 2, "e": 3}} - - print("Первый словарь (dict_a):") - print(dict_a) - print("Второй словарь (dict_b):") - print(dict_b) - - merge_dicts(dict_a, dict_b) - - print("Результат слияния (dict_a после объединения):") - print(dict_a) - -main() \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_3.py b/Lab_python/lab2/lab2.2/task_3.py deleted file mode 100644 index 874b861..0000000 --- a/Lab_python/lab2/lab2.2/task_3.py +++ /dev/null @@ -1,24 +0,0 @@ -import datetime - -def log_calls(filename): - def decorator(func): - def wrapper(*args, **kwargs): - time = datetime.datetime.now().strftime("%H:%M:%S") - args_str = str(args)[1:-1] - log_line = f"{time} - {func.__name__}({args_str})\n" - - with open(filename, 'a') as f: - f.write(log_line) - - return func(*args, **kwargs) - return wrapper - return decorator - -@log_calls("log.txt") -def calculate(a, b, op='+'): - if op == '+': return a + b - if op == '-': return a - b - if op == '*': return a * b - return a / b - -calculate(10, 15, '+') \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_4.py b/Lab_python/lab2/lab2.2/task_4.py deleted file mode 100644 index 24f2c46..0000000 --- a/Lab_python/lab2/lab2.2/task_4.py +++ /dev/null @@ -1,50 +0,0 @@ -def transpose_matrix(matrix): - if not matrix or not matrix[0]: - return [] - - rows = len(matrix) - cols = len(matrix[0]) - - result = [] - for j in range(cols): - new_row = [] - for i in range(rows): - new_row.append(matrix[i][j]) - result.append(new_row) - - return result - -print("Транспонирование матрицы") -print("Введите матрицу построчно.") -print("Введите числа через пробел для каждой строки.") -print("Для завершения ввода введите пустую строку.") - -matrix = [] -row_number = 1 - -while True: - row_input = input(f"Строка {row_number}: ").strip() - - if not row_input: - break - - row = [int(x) for x in row_input.split()] - matrix.append(row) - row_number += 1 - -if not matrix: - print("Матрица пустая! Транспонирование невозможно.") -else: - print("Исходная матрица:") - for row in matrix: - print(row) - - transposed = transpose_matrix(matrix) - - print("Транспонированная матрица:") - for row in transposed: - print(row) - - print("Исходная матрица (не изменилась):") - for row in matrix: - print(row) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_5.py b/Lab_python/lab2/lab2.2/task_5.py deleted file mode 100644 index 594d98e..0000000 --- a/Lab_python/lab2/lab2.2/task_5.py +++ /dev/null @@ -1,40 +0,0 @@ -def cache(func): - cache_dict = {} - - def wrapper(*args, **kwargs): - key = str(args) + str(kwargs) - if key in cache_dict: - print(f"Результат взят из кэша для аргументов {args}") - return cache_dict[key] - else: - print(f"Вычисляем результат для аргументов {args}") - result = func(*args, **kwargs) - cache_dict[key] = result - print(f"Результат сохранен в кэш: {result}") - return result - - return wrapper - -@cache -def multiply(a, b): - result = a * b - print(f" Вычисление: {a} * {b} = {result}") - return result - -print("Демонстрация кэширования") - -print("Первый вызов multiply(5, 3):") -result1 = multiply(5, 3) -print(f"Результат: {result1}") - -print("Второй вызов multiply(5, 3):") -result2 = multiply(5, 3) -print(f"Результат: {result2}") - -print("Вызов multiply(4, 7):") -result3 = multiply(4, 7) -print(f"Результат: {result3}") - -print("Снова multiply(4, 7):") -result4 = multiply(4, 7) -print(f"Результат: {result4}") \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_6.py b/Lab_python/lab2/lab2.2/task_6.py deleted file mode 100644 index c2352f6..0000000 --- a/Lab_python/lab2/lab2.2/task_6.py +++ /dev/null @@ -1,28 +0,0 @@ -def unique_elements(nested_list): - result = [] - - def extract_elements(lst): - for item in lst: - if isinstance(item, list): - extract_elements(item) - else: - is_duplicate = False - for existing_item in result: - if existing_item == item: - is_duplicate = True - break - if not is_duplicate: - result.append(item) - - extract_elements(nested_list) - return result - -list_a = [1, 2, 3, [4, 3, 1], 5, [6, [7, [10], 8, [9, 2, 3]]]] - -print("Исходный список:") -print(list_a) - -unique = unique_elements(list_a) - -print("Уникальные элементы:") -print(unique) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_7.py b/Lab_python/lab2/lab2.2/task_7.py deleted file mode 100644 index 448aa35..0000000 --- a/Lab_python/lab2/lab2.2/task_7.py +++ /dev/null @@ -1,37 +0,0 @@ -def merge_sorted_list(list1, list2): - result = [] - i = 0 - j = 0 - - while i < len(list1) and j < len(list2): - if list1[i] < list2[j]: - result.append(list1[i]) - i += 1 - else: - result.append(list2[j]) - j += 1 - - while i < len(list1): - result.append(list1[i]) - i += 1 - - while j < len(list2): - result.append(list2[j]) - j += 1 - - return result - -print("Введите первый отсортированный список (числа через пробел):") -input1 = input("Первый список: ") -list_a = [int(x) for x in input1.split()] - -print("Введите второй отсортированный список (числа через пробел):") -input2 = input("Второй список: ") -list_b = [int(x) for x in input2.split()] - -print("Первый список:", list_a) -print("Второй список:", list_b) - -merged = merge_sorted_list(list_a, list_b) - -print("Результат слияния:", merged) \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_8.py b/Lab_python/lab2/lab2.2/task_8.py deleted file mode 100644 index 0eb4073..0000000 --- a/Lab_python/lab2/lab2.2/task_8.py +++ /dev/null @@ -1,27 +0,0 @@ -import time - -def timing(func): - def wrapper(*args, **kwargs): - start = time.time() - result = func(*args, **kwargs) - end = time.time() - time_ms = (end - start) * 1000 - print(f"Время выполнения '{func.__name__}': {time_ms:.2f} мс") - return result - return wrapper - -@timing -def test_slow(): - time.sleep(0.3) - return - -@timing -def test_fast(): - total = 0 - for i in range(100000): - total += i - return total - -print("Тест замера времени") -test_slow() -test_fast() \ No newline at end of file diff --git a/Lab_python/lab2/lab2.2/task_9.py b/Lab_python/lab2/lab2.2/task_9.py deleted file mode 100644 index 8434139..0000000 --- a/Lab_python/lab2/lab2.2/task_9.py +++ /dev/null @@ -1,33 +0,0 @@ -def type_check(*expected_types): - def decorator(func): - def wrapper(*args, **kwargs): - if len(args) != len(expected_types): - raise TypeError( - f"Функция '{func.__name__}' ожидает {len(expected_types)} " - f"аргументов, но получено {len(args)}" - ) - - for i, (arg, expected_type) in enumerate(zip(args, expected_types)): - if type(arg) is not expected_type: - raise TypeError( - f"Аргумент {i+1} функции '{func.__name__}' должен быть " - f"{expected_type.__name__}, получен {type(arg).__name__}" - ) - - return func(*args, **kwargs) - return wrapper - return decorator - -@type_check(int, int) -def multiply(a, b): - result = a * b - print(f"Результат: {a} * {b} = {result}") - return result - -print("Проверка типов параметров") - -print("Корректный вызов:") -multiply(4, 5) - -print("Некорректный вызов:") -multiply(4, "5") \ No newline at end of file From 3518dff5a24d1aa549dd0bcee3495dbb86f2ca41 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:42:38 +0300 Subject: [PATCH 03/12] =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D0=B8=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_1.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_1.py diff --git a/Lab_python/lab2/lab2.2/task_1.py b/Lab_python/lab2/lab2.2/task_1.py new file mode 100644 index 0000000..d2a401b --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_1.py @@ -0,0 +1,15 @@ +def flatten_list(lst): + i = 0 + while i < len(lst): + if isinstance(lst[i], list): + flatten_list(lst[i]) + lst[i:i+1] = lst[i] + else: + i += 1 + +list_a = [1, 2, 3, [4], 5, [6, [7, [], 8, [9]]]] +print("Исходный список:") +print(list_a) +flatten_list(list_a) +print("Список после преобразования в плоский:") +print(list_a) \ No newline at end of file From b871f7530e9e87b8cd850c1c6915755e6509cdd7 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:42:52 +0300 Subject: [PATCH 04/12] =?UTF-8?q?=D0=A1=D0=BB=D0=B8=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_2.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_2.py diff --git a/Lab_python/lab2/lab2.2/task_2.py b/Lab_python/lab2/lab2.2/task_2.py new file mode 100644 index 0000000..d32c7fc --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_2.py @@ -0,0 +1,26 @@ +def merge_dicts(dict_a, dict_b): + for key, value in dict_b.items(): + if key in dict_a: + if isinstance(dict_a[key], dict) and isinstance(value, dict): + merge_dicts(dict_a[key], value) + else: + dict_a[key] = value + else: + dict_a[key] = value + +def main(): + print("Слияние словарей") + dict_a = {"a": 1, "b": {"c": 1, "f": 4}} + dict_b = {"d": 1, "b": {"c": 2, "e": 3}} + + print("Первый словарь (dict_a):") + print(dict_a) + print("Второй словарь (dict_b):") + print(dict_b) + + merge_dicts(dict_a, dict_b) + + print("Результат слияния (dict_a после объединения):") + print(dict_a) + +main() \ No newline at end of file From 6f8d3760dd0b29ceeacf82c21ae01dbe9c19fb36 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:43:11 +0300 Subject: [PATCH 05/12] =?UTF-8?q?=D0=B4=D0=B5=D0=BA=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_3.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_3.py diff --git a/Lab_python/lab2/lab2.2/task_3.py b/Lab_python/lab2/lab2.2/task_3.py new file mode 100644 index 0000000..874b861 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_3.py @@ -0,0 +1,24 @@ +import datetime + +def log_calls(filename): + def decorator(func): + def wrapper(*args, **kwargs): + time = datetime.datetime.now().strftime("%H:%M:%S") + args_str = str(args)[1:-1] + log_line = f"{time} - {func.__name__}({args_str})\n" + + with open(filename, 'a') as f: + f.write(log_line) + + return func(*args, **kwargs) + return wrapper + return decorator + +@log_calls("log.txt") +def calculate(a, b, op='+'): + if op == '+': return a + b + if op == '-': return a - b + if op == '*': return a * b + return a / b + +calculate(10, 15, '+') \ No newline at end of file From ef89fbee9f1f431e181f104f397155c79b2f8a98 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:43:26 +0300 Subject: [PATCH 06/12] =?UTF-8?q?=D0=B4=D0=BB=D1=8F=203=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/log.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/log.txt diff --git a/Lab_python/lab2/lab2.2/log.txt b/Lab_python/lab2/lab2.2/log.txt new file mode 100644 index 0000000..3cad4af --- /dev/null +++ b/Lab_python/lab2/lab2.2/log.txt @@ -0,0 +1,3 @@ +01:22:50 - calculate(5, 3, '+') +01:22:57 - calculate(5, 3, '+') +01:25:13 - calculate(10, 15, '+') From 2c7fdb6984d1e51cbff03de172ef6dc04f8c8d73 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:43:42 +0300 Subject: [PATCH 07/12] =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D1=80=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_4.py | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_4.py diff --git a/Lab_python/lab2/lab2.2/task_4.py b/Lab_python/lab2/lab2.2/task_4.py new file mode 100644 index 0000000..24f2c46 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_4.py @@ -0,0 +1,50 @@ +def transpose_matrix(matrix): + if not matrix or not matrix[0]: + return [] + + rows = len(matrix) + cols = len(matrix[0]) + + result = [] + for j in range(cols): + new_row = [] + for i in range(rows): + new_row.append(matrix[i][j]) + result.append(new_row) + + return result + +print("Транспонирование матрицы") +print("Введите матрицу построчно.") +print("Введите числа через пробел для каждой строки.") +print("Для завершения ввода введите пустую строку.") + +matrix = [] +row_number = 1 + +while True: + row_input = input(f"Строка {row_number}: ").strip() + + if not row_input: + break + + row = [int(x) for x in row_input.split()] + matrix.append(row) + row_number += 1 + +if not matrix: + print("Матрица пустая! Транспонирование невозможно.") +else: + print("Исходная матрица:") + for row in matrix: + print(row) + + transposed = transpose_matrix(matrix) + + print("Транспонированная матрица:") + for row in transposed: + print(row) + + print("Исходная матрица (не изменилась):") + for row in matrix: + print(row) \ No newline at end of file From 52b1283ea3e747d725be4b095c34fd812e24237d Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:43:54 +0300 Subject: [PATCH 08/12] =?UTF-8?q?=D0=94=D0=B5=D0=BA=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20=D0=BA=D1=8D=D1=88=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_5.py | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_5.py diff --git a/Lab_python/lab2/lab2.2/task_5.py b/Lab_python/lab2/lab2.2/task_5.py new file mode 100644 index 0000000..594d98e --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_5.py @@ -0,0 +1,40 @@ +def cache(func): + cache_dict = {} + + def wrapper(*args, **kwargs): + key = str(args) + str(kwargs) + if key in cache_dict: + print(f"Результат взят из кэша для аргументов {args}") + return cache_dict[key] + else: + print(f"Вычисляем результат для аргументов {args}") + result = func(*args, **kwargs) + cache_dict[key] = result + print(f"Результат сохранен в кэш: {result}") + return result + + return wrapper + +@cache +def multiply(a, b): + result = a * b + print(f" Вычисление: {a} * {b} = {result}") + return result + +print("Демонстрация кэширования") + +print("Первый вызов multiply(5, 3):") +result1 = multiply(5, 3) +print(f"Результат: {result1}") + +print("Второй вызов multiply(5, 3):") +result2 = multiply(5, 3) +print(f"Результат: {result2}") + +print("Вызов multiply(4, 7):") +result3 = multiply(4, 7) +print(f"Результат: {result3}") + +print("Снова multiply(4, 7):") +result4 = multiply(4, 7) +print(f"Результат: {result4}") \ No newline at end of file From de984e5c9f5281db2d8aeb7a28afe8c8637b2bae Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:44:06 +0300 Subject: [PATCH 09/12] =?UTF-8?q?=D0=A3=D0=BD=D0=B8=D0=BA=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_6.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_6.py diff --git a/Lab_python/lab2/lab2.2/task_6.py b/Lab_python/lab2/lab2.2/task_6.py new file mode 100644 index 0000000..c2352f6 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_6.py @@ -0,0 +1,28 @@ +def unique_elements(nested_list): + result = [] + + def extract_elements(lst): + for item in lst: + if isinstance(item, list): + extract_elements(item) + else: + is_duplicate = False + for existing_item in result: + if existing_item == item: + is_duplicate = True + break + if not is_duplicate: + result.append(item) + + extract_elements(nested_list) + return result + +list_a = [1, 2, 3, [4, 3, 1], 5, [6, [7, [10], 8, [9, 2, 3]]]] + +print("Исходный список:") +print(list_a) + +unique = unique_elements(list_a) + +print("Уникальные элементы:") +print(unique) \ No newline at end of file From 9e823490d6ced755cedfb55352b1daa6b592a951 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:44:17 +0300 Subject: [PATCH 10/12] =?UTF-8?q?=D0=A1=D0=BE=D1=80=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D1=81=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_7.py | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_7.py diff --git a/Lab_python/lab2/lab2.2/task_7.py b/Lab_python/lab2/lab2.2/task_7.py new file mode 100644 index 0000000..448aa35 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_7.py @@ -0,0 +1,37 @@ +def merge_sorted_list(list1, list2): + result = [] + i = 0 + j = 0 + + while i < len(list1) and j < len(list2): + if list1[i] < list2[j]: + result.append(list1[i]) + i += 1 + else: + result.append(list2[j]) + j += 1 + + while i < len(list1): + result.append(list1[i]) + i += 1 + + while j < len(list2): + result.append(list2[j]) + j += 1 + + return result + +print("Введите первый отсортированный список (числа через пробел):") +input1 = input("Первый список: ") +list_a = [int(x) for x in input1.split()] + +print("Введите второй отсортированный список (числа через пробел):") +input2 = input("Второй список: ") +list_b = [int(x) for x in input2.split()] + +print("Первый список:", list_a) +print("Второй список:", list_b) + +merged = merge_sorted_list(list_a, list_b) + +print("Результат слияния:", merged) \ No newline at end of file From e60215f5bf51b32775b0db7fbc9bd8d1c555e757 Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:44:30 +0300 Subject: [PATCH 11/12] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D1=80=20=D0=B2?= =?UTF-8?q?=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_8.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_8.py diff --git a/Lab_python/lab2/lab2.2/task_8.py b/Lab_python/lab2/lab2.2/task_8.py new file mode 100644 index 0000000..0eb4073 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_8.py @@ -0,0 +1,27 @@ +import time + +def timing(func): + def wrapper(*args, **kwargs): + start = time.time() + result = func(*args, **kwargs) + end = time.time() + time_ms = (end - start) * 1000 + print(f"Время выполнения '{func.__name__}': {time_ms:.2f} мс") + return result + return wrapper + +@timing +def test_slow(): + time.sleep(0.3) + return + +@timing +def test_fast(): + total = 0 + for i in range(100000): + total += i + return total + +print("Тест замера времени") +test_slow() +test_fast() \ No newline at end of file From d2f0002a52f6898b62881e1cabdbb4dc32f0917f Mon Sep 17 00:00:00 2001 From: qawdesm Date: Tue, 30 Sep 2025 09:44:44 +0300 Subject: [PATCH 12/12] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_python/lab2/lab2.2/task_9.py | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Lab_python/lab2/lab2.2/task_9.py diff --git a/Lab_python/lab2/lab2.2/task_9.py b/Lab_python/lab2/lab2.2/task_9.py new file mode 100644 index 0000000..8434139 --- /dev/null +++ b/Lab_python/lab2/lab2.2/task_9.py @@ -0,0 +1,33 @@ +def type_check(*expected_types): + def decorator(func): + def wrapper(*args, **kwargs): + if len(args) != len(expected_types): + raise TypeError( + f"Функция '{func.__name__}' ожидает {len(expected_types)} " + f"аргументов, но получено {len(args)}" + ) + + for i, (arg, expected_type) in enumerate(zip(args, expected_types)): + if type(arg) is not expected_type: + raise TypeError( + f"Аргумент {i+1} функции '{func.__name__}' должен быть " + f"{expected_type.__name__}, получен {type(arg).__name__}" + ) + + return func(*args, **kwargs) + return wrapper + return decorator + +@type_check(int, int) +def multiply(a, b): + result = a * b + print(f"Результат: {a} * {b} = {result}") + return result + +print("Проверка типов параметров") + +print("Корректный вызов:") +multiply(4, 5) + +print("Некорректный вызов:") +multiply(4, "5") \ No newline at end of file