форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
94 строки
3.4 KiB
Python
94 строки
3.4 KiB
Python
# Модуль М2
|
|
import pickle
|
|
import os
|
|
import matplotlib.pyplot as plt
|
|
from m1 import sred, colvo
|
|
|
|
def ctenie():
|
|
"""Чтение данных из бинарного файла"""
|
|
filename = input("Введите имя бинарного файла: ")
|
|
|
|
if not os.path.exists(filename):
|
|
print(f"Файл {filename} не существует!")
|
|
return None, None
|
|
|
|
try:
|
|
with open(filename, 'rb') as file:
|
|
data = pickle.load(file)
|
|
if len(data) >= 2:
|
|
A = data[0]
|
|
B = data[1]
|
|
return A, B
|
|
else:
|
|
print("Файл должен содержать как минимум два списка/кортежа")
|
|
return None, None
|
|
except Exception as e:
|
|
print(f"Ошибка при чтении файла: {e}")
|
|
return None, None
|
|
|
|
def process_data():
|
|
"""Основная функция обработки данных"""
|
|
# Чтение данных из файла
|
|
A, B = ctenie()
|
|
|
|
if A is None or B is None:
|
|
return None
|
|
|
|
print(f"\nСписок A: {A}")
|
|
print(f"Список B: {B}")
|
|
|
|
# Применение функции 1
|
|
results = sred(A, B)
|
|
avg_A, avg_B, P = results
|
|
|
|
print(f"\nСреднее значение A: {avg_A:.2f}")
|
|
print(f"Среднее значение B: {avg_B:.2f}")
|
|
print(f"Пороговое значение P: {P:.2f}")
|
|
|
|
# Применение функции 2 к спискам A и B
|
|
up_A, down_A = colvo(A, P)
|
|
up_B, down_B = colvo(B, P)
|
|
|
|
print(f"\nДля списка A:")
|
|
print(f" Элементов выше P ({P:.2f}): {up_A}")
|
|
print(f" Элементов не выше P: {down_A}")
|
|
|
|
print(f"\nДля списка B:")
|
|
print(f" Элементов выше P ({P:.2f}): {up_B}")
|
|
print(f" Элементов не выше P: {down_B}")
|
|
|
|
# Построение графика
|
|
plot_data(A, B, avg_A, avg_B, P)
|
|
|
|
return results
|
|
|
|
def plot_data(A, B, avg_A, avg_B, P):
|
|
"""Построение графика для списков A и B"""
|
|
plt.figure(figsize=(10, 6))
|
|
|
|
# Создание индексов для элементов
|
|
indices_A = range(len(A))
|
|
indices_B = range(len(B))
|
|
|
|
# Построение точек для списка A
|
|
plt.scatter(indices_A, A, color='blue', label='Список A', s=50, alpha=0.7)
|
|
|
|
# Построение точек для списка B
|
|
plt.scatter(indices_B, B, color='red', label='Список B', s=50, alpha=0.7)
|
|
|
|
# Горизонтальные линии для средних значений и порога
|
|
plt.axhline(y=avg_A, color='blue', linestyle='--', alpha=0.5, label=f'Среднее A: {avg_A:.2f}')
|
|
plt.axhline(y=avg_B, color='red', linestyle='--', alpha=0.5, label=f'Среднее B: {avg_B:.2f}')
|
|
plt.axhline(y=P, color='green', linestyle='-', alpha=0.7, label=f'Порог P: {P:.2f}')
|
|
|
|
# Настройка графика
|
|
plt.xlabel('Индекс элемента')
|
|
plt.ylabel('Значение элемента')
|
|
plt.title('Сравнение списков A и B')
|
|
plt.legend()
|
|
plt.grid(True, alpha=0.3)
|
|
|
|
# Сохранение графика
|
|
plt.savefig('comparison_plot.png', dpi=300, bbox_inches='tight')
|
|
plt.show()
|