Сравнить коммиты

...

7 Коммитов

Автор SHA1 Сообщение Дата
e1d0599622 zadanie 2025-12-08 16:55:43 +03:00
e67b412977 ris 2025-12-08 16:30:07 +03:00
69a9d61875 zadanie1 2025-12-08 16:27:43 +03:00
7c1552aa67 zadanie 2025-12-08 15:24:08 +03:00
b3bd732ba8 zadanie 2025-12-08 15:11:01 +03:00
6053fbe787 16 2025-12-08 14:28:39 +03:00
bdeb1c27f1 9 2025-12-07 22:52:02 +03:00
5 изменённых файлов: 306 добавлений и 1 удалений

42
TEMA8/16.md Обычный файл
Просмотреть файл

@@ -0,0 +1,42 @@
Разработайте функцию с 2 аргументами, которая для заданного словаря (аргумент функции) с любыми ключами и с числовыми значениями создаёт новый словарь с теми же ключами и со значениями, равными синусам от значений из входного словаря с заданным именами. Проверьте функцию на примере двух разных входных словарей.
Через модуль:
Модуль1
```py
import math
def f(a):
"""Функция f."""
result = {}
for k, v in a.items(): # Перебираем все пары ключ-значение
result[k] = math.sin(v)
return result
def test():
"""Первая тестовая функция."""
print("Тест 1", f({'a': 0, 'b': 1.57, 'c': 3.14}))
if __name__ == "__main__":
test()
print("mode1.py работает корректно")
```
Модуль2:
```py
from mode1 import f
def test2():
"""Вторая тестовая функция."""
print("Тест 2", f({'x': 0.5, 'y': 1.0, 'z': 2.0}))
if __name__ == "__main__":
test2()
print("mode2.py работает корректно")
```
```py
>>> os.chdir('C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA8')
>>> import mode1
>>> import mode2
>>> mode1.test()
Тест 1 {'a': 0.0, 'b': 0.9999996829318346, 'c': 0.0015926529164868282}
>>> mode2.test2()
Тест 2 {'x': 0.479425538604203, 'y': 0.8414709848078965, 'z': 0.9092974268256817}
```

111
TEMA8/1819.md Обычный файл
Просмотреть файл

@@ -0,0 +1,111 @@
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}
```

Просмотреть файл

@@ -319,4 +319,5 @@ y= 0.9260125207356777
[<matplotlib.lines.Line2D object at 0x0000028C385FB110>]
>>> pylab.show()
lin1
```
```
![](Ris1.png)

Двоичные данные
TEMA9/Figure_1.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

151
TEMA9/zadanie1.md Обычный файл
Просмотреть файл

@@ -0,0 +1,151 @@
M3_1
1)Создайте модуль М1, содержащий две функции:
функция 1: аргумент - список или кортеж с выборкой; функция должна произвести расчет по выборке оценки её дисперсии DX, а также наименьшего и наибольшего значений и вернуть эти значения в вызывающую программу в виде списка;
функция 2: аргументы - два списка или кортежа с выборками X и Y; функция должна произвести с помощью функции 1 расчет статистик по выборкам и рассчитать статистику Фишера:
F=DX/DY
2)Создайте еще один модуль М2, в котором должны выполняться следующие операции:
запрашивается имя бинарного файла с выборками X и Y, проверяется его наличие и при отсутствии - повторяется запрос;
выборки считываются из файлов;
с помощью функции 1 по выборкам рассчитываются их статистики,
с помощью функции 2 рассчитывается значение статистики Фишера,
если числа элементов в выборках одинаково, графически отображается поле рассеивания для Х и Y;
результаты расчета с соответствующими заголовками выводятся в текстовый файл.
3)Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
4)Создайте 2 бинарных файла: с выборками одинакового размера и с выборками разного размера. Проверьте программу с использованием этих файлов.
Модуль 1
```py
import math
def disp(s): # функция рассчета дисперсии
if len(s) == 0:
return [0, 0, 0]
sr = sum(s) / len(s)
v = sum((x - sr) ** 2 for x in s) / len(s) # среднее квадратов отклонений от среднего
m_n = min(s)
m_x = max(s)
return [v, m_n, m_x]
def fisher_stat(sample_x, sample_y): # статистика фишера
stats_x = disp(sample_x)
stats_y = disp(sample_y)
dx = stats_x[0] # дисп х
dy = stats_y[0] # дисп у
if dy == 0:
return 0, stats_x, stats_y
else:
f = dx / dy
return f, stats_x, stats_y
```
Модуль 2
```py
import pickle
import matplotlib.pyplot as plt
import M1
def load_samples(filename): #Загружаем выборки х и у
while True:
try:
with open(filename, 'rb') as f:
data = pickle.load(f)
x = data['X']
y = data['Y']
print(f"Файл {filename} успешно загружен!")
return x, y
except FileNotFoundError:
print(f"Файл {filename} не найден!")
filename = input("Введите имя файла снова: ")
except Exception as e:
print(f"Ошибка чтения файла: {e}")
filename = input("Введите имя файла снова: ")
def analysis():
x, y = load_samples(input("Введите имя бинарного файла: "))
f, stats_x, stats_y = M1.fisher_stat(x, y)
print("\nРЕЗУЛЬТАТЫ РАСЧЕТА:")
print(f"Размер выборки X: {len(x)}, Y: {len(y)}")
print(f"X: Дисперсия={stats_x[0]:.4f}, мин={stats_x[1]:.4f}, макс={stats_x[2]:.4f}")
print(f"Y: Дисперсия={stats_y[0]:.4f}, мин={stats_y[1]:.4f}, макс={stats_y[2]:.4f}")
print(f"Статистика Фишера F = {f:.4f}")
if len(x) == len(y): # График размеры одинаковые
plt.figure(figsize=(8, 6))
plt.scatter(x, y, alpha=0.7, color='blue')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Поле рассеивания X-Y')
plt.grid(True)
plt.show()
# Сохраняем в текстовый файл
with open('results.txt', 'w') as f: # Сохраняем в файл
f.write("РЕЗУЛЬТАТЫ СТАТИСТИЧЕСКОГО АНАЛИЗА\n")
f.write(f"Размер выборки X: {len(x)}\n")
f.write(f"Размер выборки Y: {len(y)}\n\n")
f.write(f"СТАТИСТИКИ ПО X:\n")
f.write(f" Дисперсия DX = {stats_x[0]:.6f}\n")
f.write(f" Минимум = {stats_x[1]:.6f}\n")
f.write(f" Максимум = {stats_x[2]:.6f}\n")
f.write(f"СТАТИСТИКИ ПО Y:\n")
f.write(f" Дисперсия DY = {stats_y[0]:.6f}\n")
f.write(f" Минимум = {stats_y[1]:.6f}\n")
f.write(f" Максимум = {stats_y[2]:.6f}\n")
f.write(f"СТАТИСТИКА ФИШЕРА:\n")
f.write(f" F = DX/DY = {f:.6f}\n")
print("Результаты сохранены в файл results.txt")
return f, stats_x, stats_y
if __name__ == "__main__":
analysis()
```
Модуль 0
```py
import M2
def main():
print("СТАТИСТИЧЕСКИЙ АНАЛИЗ")
results = M2.analysis() # Запускаем анализ
print("АНАЛИЗ ЗАВЕРШЕН!")
if __name__ == "__main__":
main()
```
```py
>>> import os
>>> os.chdir('C:\\Users\\Admin\\Documents\\Tsvetkova\\python-labs\\TEMA9')
>>> import M1
>>> import M2
>>> import M0
>>> M0.main()
СТАТИСТИЧЕСКИЙ АНАЛИЗ
Введите имя бинарного файла: same_size.bin
Файл same_size.bin успешно загружен!
РЕЗУЛЬТАТЫ РАСЧЕТА:
Размер выборки X: 20, Y: 20
X: Дисперсия=4.7969, мин=1.4282, макс=9.9043
Y: Дисперсия=3.2402, мин=2.1279, макс=7.5406
Статистика Фишера F = 1.4804
```
![](Figure_1.png)