# Индивидуальное задание по модулю 3 Грудинин Егор, А-03-23 ## Задание Вариант 4 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - списки А и В с необязательно равными числами элементов; в функции по спискам вычисляются и возвращается список SPS со средними значениями МА, МВ, оценками дисперсий DА,DВ, а также с наибольшим и наименьшим значениями по совокупности данных из обоих списков; - функция 2 : аргументы - числовое значение х и списки А и В; в функции по спискам находится элемент z, для которого значение |z-x| будет наименьшим, и возвращается символьное значение А, если этот элемент будет найден в списке А, или В, если он найдется в В. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два списка: А и В; - с применением функции 1 рассчитываются и отображаются параметры данных; - у пользователя запрашивается значение х; с применением функции 2 определяется символ, указывающий имя списка с наиболее "близким" значением и отображается на экране; эта операция повторяется до тех пор, пока пользователь в ответ на запрос не введет пустое значение. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список SPS, полученный в функции 1 в текстовый файл Res000.txt. 4) Для проверки программы запишите в бинарный файл с некоторым именем два списка: А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665 В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993 и введите контрольные значения х=-100 и х= 3500. ## Решение Запись данных в бинарный файл ```py import pickle a = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665] b = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993] f = open('data.bin', 'wb') pickle.dump(a, f) pickle.dump(b, f) f.close() print('Данные записаны в data.bin') ``` M1 ```py def func1(a, b): ma = sum(a) / len(a) mb = sum(b) / len(b) da = sum((x - ma) ** 2 for x in a) / (len(a) - 1) db = sum((x - mb) ** 2 for x in b) / (len(b) - 1) ab = a + b maxv = max(ab) minv = min(ab) sps = [ma, mb, da, db, maxv, minv] return sps def func2(x, a, b): mina = min(abs(z - x) for z in a) minb = min(abs(z - x) for z in b) if mina < minb: return 'A' else: return 'B' ``` M2 ```py import pickle import os from M1 import func1, func2 def main(): fname = input('Имя бинарного файла: ') if not os.path.exists(fname): print('Файл не существует') return None f = open(fname, 'rb') a = pickle.load(f) b = pickle.load(f) f.close() print('\nСписок A:', a) print('Список B:', b) sps = func1(a, b) print('\nПараметры данных:') print('Среднее A:', sps[0]) print('Среднее B:', sps[1]) print('Дисперсия A:', sps[2]) print('Дисперсия B:', sps[3]) print('Максимум:', sps[4]) print('Минимум:', sps[5]) while True: xstr = input('\nВведите x (Enter для выхода): ') if xstr == '': break x = float(xstr) rez = func2(x, a, b) print('Список с наиболее близким значением:', rez) return sps ``` M0 ```py import M2 sps = M2.main() if sps: f = open('Res000.txt', 'w') for v in sps: f.write(str(v) + '\n') f.close() print('\nРезультаты записаны в Res000.txt') ```