форкнуто от main/python-labs
Родитель
6053fbe787
Сommit
b3bd732ba8
@ -0,0 +1,116 @@
|
||||
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
|
||||
except FileNotFoundError:
|
||||
print(f"Файл не найден: {filename}")
|
||||
return {}
|
||||
except Exception as e:
|
||||
print(f"Ошибка: {e}")
|
||||
return {}
|
||||
|
||||
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}
|
||||
```
|
||||
Загрузка…
Ссылка в новой задаче