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

5.8 KiB

Туровец Евгений В18

M3_18

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

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

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

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

  • функция 2 поочередно применяется к объектам А и В с порогом Р, рассчитанным в функции 1; отображаются результаты расчета;

  • объекты А и В отображаются на одном графике с разметкой осей

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

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

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

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

Проведите расчеты с этими данными. mo:

from m2 import obrabotka as ob
def main():
    """Основная функция программы"""
    print("=== ОБРАБОТКА ДВУХ СПИСКОВ ===")

    results = ob()
    if results is not None:

        try:
            with open('Res1234.txt', 'w', encoding='utf-8') as file:
                file.write("Результаты расчета:\n")
                file.write(f"Среднее значение A: {results[0]:.2f}\n")
                file.write(f"Среднее значение B: {results[1]:.2f}\n")
                file.write(f"Пороговое значение P: {results[2]:.2f}\n")
                file.write(f"Список результатов: {results}\n")
            
            print("\nРезультаты успешно записаны в файл 'Res1234.txt'")
        except Exception as e:
            print(f"Ошибка при записи в файл: {e}")
    else:
        print("Программа завершена с ошибкой.")

if __name__ == "__main__":
    main()

m1:

def sred(A, B):
    avg_A = sum(A) / len(A) if len(A) > 0 else 0
    avg_B = sum(B) / len(B) if len(B) > 0 else 0
    P = (avg_A + avg_B) / 2
    return [avg_A, avg_B, P]

def colvo(C, M):
    up = 0
    down = 0

    for element in C:
        if element > M:
            up += 1
        else:
            down += 1
    
    return up, down

m2:

import pickle
import os
from m1 import sred, colvo

def obrabotka():
    filename = input("Имя файла: ")
    if not os.path.exists(filename):
        print("Файл не найден!")
        return
    with open(filename, 'rb') as f:
        data = pickle.load(f)
        A, B = data[0], data[1]
    print(f"A: {A}")
    print(f"B: {B}")
    avg_A, avg_B, P = sred(A, B)
    print(f"\nСреднее A: {avg_A:.2f}")
    print(f"Среднее B: {avg_B:.2f}")
    print(f"Порог P: {P:.2f}")
    up_A, down_A = colvo(A, P)
    up_B, down_B = colvo(B, P)
    print(f"\nA: выше {up_A}, ниже {down_A}")
    print(f"B: выше {up_B}, ниже {down_B}")
    return [avg_A, avg_B, P]

Скрипт для создания начальных данных:

import pickle

A = [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
B = [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]

filename = input("Введите имя файла для сохранения тестовых данных (например: test_data.bin): ")

try:
    with open(filename, 'wb') as file:
        pickle.dump([A, B], file)
    print(f"Тестовые данные успешно сохранены в файл '{filename}'")
    print(f"Список A: {A}")
    print(f"Список B: {B}")
except Exception as e:
    print(f"Ошибка при сохранении файла: {e}")

"""" Вывод:

Введите имя файла для сохранения тестовых данных: test1
Тестовые данные успешно сохранены в файл 'test1'
Список A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
Список B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]

Имя файла: test1
A: [-440, -131, -456, 1419, -167, -322, -416, 1695, 421, 3209, 2665]
B: [3359, 2051, 1496, 526, 2647, 4951, 10663, 7699, 5993]

Среднее A: 679.73
Среднее B: 4376.11
Порог P: 2527.92

A: выше 2, ниже 9
B: выше 6, ниже 3

Результаты успешно записаны в файл 'Res1234.txt'