/
04543
/
python_for_data_analysis
Обзор
Документация
Войти
/
04543
/
python_for_data_analysis
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
matrix_calculation.py
101 строка
4 KB
Василий Ковалик
update matrix_calculation.py - усложнение тестов
24 ноя 2025, 18:22
24 ноя 2025, 18:22
d92634b
Код
Авторство
О чём код?
import time import random from datetime import datetime def timer_decorator(func): """Декоратор для записи времени выполнения в файл""" def wrapper(*args, **kwargs): start_time = time.time() start_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S") try: result = func(*args, **kwargs) end_time = time.time() end_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S") duration = end_time - start_time with open("matrix_calculation_log.txt", "a", encoding="utf-8") as f: f.write(f"Функция: {func.__name__}\n") f.write(f"Время начала: {start_datetime}\n") f.write(f"Время окончания: {end_datetime}\n") f.write(f"Продолжительность: {duration:.6f} секунд\n") f.write("-" * 50 + "\n") return result except Exception as e: end_time = time.time() end_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S") duration = end_time - start_time # Записываем информацию об ошибке в файл with open("matrix_calculation_log.txt", "a", encoding="utf-8") as f: f.write(f"Функция: {func.__name__}\n") f.write(f"Время начала: {start_datetime}\n") f.write(f"Время окончания: {end_datetime}\n") f.write(f"Продолжительность: {duration:.6f} секунд\n") f.write(f"ОШИБКА: {str(e)}\n") f.write("-" * 50 + "\n") raise return wrapper def matrix_multiply_with_exceptions(matrix1, matrix2): n = len(matrix1) if len(matrix1[0]) != n or len(matrix2) != n or len(matrix2[0]) != n: raise ValueError("Матрицы должны быть размером n*n") result = [[0 for _ in range(n)] for _ in range(n)] return result @timer_decorator def multiply_matrices_safe(matrix1, matrix2): """Умножение матриц с обработкой всех исключений""" try: if not matrix1 or not matrix2: raise ValueError("Матрицы не могут быть пустыми") error_probability = 0.3 n1 = len(matrix1) n2 = len(matrix2) if random.random() < error_probability: n2 = len(matrix2) + 1 if n1 != n2: raise ValueError(f"Размеры матриц не совпадают: {n1}x{n1} и {n2}x{n2}") for i in range(n1): if len(matrix1[i]) != n1: raise ValueError(f"Строка {i} первой матрицы имеет неправильную длину") if len(matrix2[i]) != n1: raise ValueError(f"Строка {i} второй матрицы имеет неправильную длину") result = matrix_multiply_with_exceptions(matrix1, matrix2) return result except Exception as e: raise Exception(f"Ошибка при умножении матриц: {str(e)}") if __name__ == "__main__": try: print("Создание матриц") matrix1 = [[i * 10000 + j + 1 for j in range(10000)] for i in range(10000)] matrix2 = [[10000 * 10000 - (i * 10000 + j) for j in range(10000)] for i in range(10000)] print("Умножение матриц...") result = multiply_matrices_safe(matrix1, matrix2) print("Умножение завершено успешно!") print(f"Размер результата: {len(result)}x{len(result[0])}") except Exception as e: print(f"Произошла ошибка: {e}")