Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

4.7 KiB

Индивидуальное задание по модулю 3

Грудинин Егор, А-03-23

Задание

Вариант 4

  1. Создайте модуль М1, содержащий две функции:
  • функция 1: аргументы - списки А и В с необязательно равными числами элементов; в функции по спискам вычисляются и возвращается список SPS со средними значениями МА, МВ, оценками дисперсий DА,DВ, а также с наибольшим и наименьшим значениями по совокупности данных из обоих списков;

  • функция 2 : аргументы - числовое значение х и списки А и В; в функции по спискам находится элемент z, для которого значение |z-x| будет наименьшим, и возвращается символьное значение А, если этот элемент будет найден в списке А, или В, если он найдется в В.

  1. Создайте еще один модуль М2, в котором должны выполняться операции:
  • запрашивается и вводится имя бинарного файла, проверяется его наличие, и если он существует, то из него считываются два списка: А и В;

  • с применением функции 1 рассчитываются и отображаются параметры данных;

  • у пользователя запрашивается значение х; с применением функции 2 определяется символ, указывающий имя списка с наиболее "близким" значением и отображается на экране; эта операция повторяется до тех пор, пока пользователь в ответ на запрос не введет пустое значение.

  1. Создайте модуль М0 - главную программу, которая вызывает М2 и записывает список SPS, полученный в функции 1 в текстовый файл Res000.txt.

  2. Для проверки программы запишите в бинарный файл с некоторым именем два списка:

А: -440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665

В: 3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993

и введите контрольные значения х=-100 и х= 3500.

Решение

Запись данных в бинарный файл

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

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

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

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')