16. Разработайте функцию с 2 аргументами, которая для заданного словаря (аргумент функции) с любыми ключами и с числовыми значениями создаёт новый словарь с теми же ключами и со значениями, равными синусам от значений из входного словаря, и записывает новый словарь в бинарный файл с заданным именем (аргумент функции). Проверьте функцию на примере двух разных входных словарей. Модуль 1 ```py import math import pickle def slov_sin(input_dict, filename): new_dict = {key: math.sin(value) for key, value in input_dict.items()} with open(filename, 'wb') as f: pickle.dump(new_dict, f) print(f"Файл записан: {filename}") return new_dict def read_slov(filename): try: with open(filename, 'rb') as f: loaded_dict = pickle.load(f) print(f"Файл прочитан: {filename}") return loaded_dict def test1(): dict1 = {'a': 0, 'b': math.pi / 2, 'c': math.pi, 'd': 3 * math.pi / 2} file1 = 'sin_values_1.bin' saved = slov_sin(dict1, file1) loaded = read_slov(file1) print(f"Исходный: {dict1}") print(f"Загруженный: {loaded}") if saved == loaded: print("OK") else: print("ERROR") return loaded def test2(): dict2 = {'x': 1.0, 'y': 2.0, 'z': -0.5} file2 = 'sin_values_2.bin' saved = slov_sin(dict2, file2) loaded = read_slov(file2) print(f"Исходный: {dict2}") print(f"Загруженный: {loaded}") if saved == loaded: print("OK") else: print("ERROR") return loaded if __name__ == "__main__": print("Тесты запущены") test1() test2() print("\n" + "="*60) print("АВТОТЕСТЫ ЗАВЕРШЕНЫ") print("="*60) ``` Модуль 2 ```py import slov_module def run_tests(): """Запустить все тесты""" print("Тест 1:") slov_module.test1() print("\nТест 2:") slov_module.test2() print("\nТест 3 (свой):") d = {'x': 0.5, 'y': 1.0, 'z': 2.0} f = 'my_test.bin' s = slov_module.slov_sin(d, f) print(f"Исходный: {d}") print(f"Синусы: {s}") l = slov_module.read_slov(f) print(f"Из файла: {l}") if __name__ == "__main__": run_tests() ``` ```py >>> import slov_module >>> import test_module >>> slov_module.test1() Файл записан: sin_values_1.bin Файл прочитан: sin_values_1.bin Исходный: {'a': 0, 'b': 1.5707963267948966, 'c': 3.141592653589793, 'd': 4.71238898038469} Загруженный: {'a': 0.0, 'b': 1.0, 'c': 1.2246467991473532e-16, 'd': -1.0} OK {'a': 0.0, 'b': 1.0, 'c': 1.2246467991473532e-16, 'd': -1.0} >>> slov_module.test2() Файл записан: sin_values_2.bin Файл прочитан: sin_values_2.bin Исходный: {'x': 1.0, 'y': 2.0, 'z': -0.5} Загруженный: {'x': 0.8414709848078965, 'y': 0.9092974268256817, 'z': -0.479425538604203} OK {'x': 0.8414709848078965, 'y': 0.9092974268256817, 'z': -0.479425538604203} ```