форкнуто от main/python-labs
Родитель
51f98ccafe
Сommit
5796188292
@ -0,0 +1,9 @@
|
|||||||
|
import pickle
|
||||||
|
import MOD2
|
||||||
|
|
||||||
|
fname, stats_all = MOD2.process_file()
|
||||||
|
|
||||||
|
with open("RES2a.bin", 'wb') as f:
|
||||||
|
pickle.dump(stats_all, f)
|
||||||
|
|
||||||
|
print(f"Сохранено статистик: {len(stats_all)}")
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
def func_1(file, KK):
|
||||||
|
"""Разделение чисел на два файла по пороговому значению KK"""
|
||||||
|
numbers = []
|
||||||
|
with open(file, 'r') as f:
|
||||||
|
for line in f:
|
||||||
|
parts = line.split()
|
||||||
|
for x in parts:
|
||||||
|
num = float(x)
|
||||||
|
numbers.append(num)
|
||||||
|
|
||||||
|
file_1 = []
|
||||||
|
file_2 = []
|
||||||
|
for x in numbers:
|
||||||
|
if x > KK:
|
||||||
|
file_1.append(x)
|
||||||
|
else:
|
||||||
|
file_2.append(x)
|
||||||
|
|
||||||
|
name_1 = file.replace('.txt', '1.txt')
|
||||||
|
name_2 = file.replace('.txt', '2.txt')
|
||||||
|
|
||||||
|
with open(name_1, 'w') as f:
|
||||||
|
for x in file_1:
|
||||||
|
f.write(f"{x} ")
|
||||||
|
|
||||||
|
with open(name_2, 'w') as f:
|
||||||
|
for x in file_2:
|
||||||
|
f.write(f"{x} ")
|
||||||
|
|
||||||
|
return numbers
|
||||||
|
|
||||||
|
def func_2(file):
|
||||||
|
import statistics
|
||||||
|
import math
|
||||||
|
numbers = []
|
||||||
|
|
||||||
|
with open(file, 'r') as f:
|
||||||
|
for line in f:
|
||||||
|
parts = line.split()
|
||||||
|
for x in parts:
|
||||||
|
num = float(x)
|
||||||
|
numbers.append(num)
|
||||||
|
|
||||||
|
# Исправление деления на ноль
|
||||||
|
if len(numbers) <= 1:
|
||||||
|
if numbers:
|
||||||
|
x = numbers[0]
|
||||||
|
return x, x, x, x, 0.0
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
sred = sum(numbers) / len(numbers)
|
||||||
|
mediana = statistics.median(numbers)
|
||||||
|
minimum = min(numbers)
|
||||||
|
maximum = max(numbers)
|
||||||
|
|
||||||
|
sum_kvadratov = 0
|
||||||
|
for x in numbers:
|
||||||
|
kvadrat = (x - sred) * (x - sred)
|
||||||
|
sum_kvadratov += kvadrat
|
||||||
|
|
||||||
|
std = math.sqrt(sum_kvadratov / (len(numbers) - 1))
|
||||||
|
|
||||||
|
return sred, mediana, minimum, maximum, std
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
import os
|
||||||
|
import MOD1
|
||||||
|
|
||||||
|
def process_file():
|
||||||
|
while True:
|
||||||
|
file = input("Введите имя файла: ")
|
||||||
|
if os.path.exists(file):
|
||||||
|
break
|
||||||
|
print("Такого файла нет!")
|
||||||
|
|
||||||
|
KK = float(input("Пороговое значение KK: "))
|
||||||
|
MOD1.func_1(file, KK)
|
||||||
|
|
||||||
|
file_1 = file.replace('.txt', '1.txt')
|
||||||
|
file_2 = file.replace('.txt', '2.txt')
|
||||||
|
|
||||||
|
stats = []
|
||||||
|
|
||||||
|
read_1 = MOD1.func_2(file)
|
||||||
|
if read_1:
|
||||||
|
stats.append(('Исходный', read_1))
|
||||||
|
|
||||||
|
if os.path.exists(file_1):
|
||||||
|
read_2 = MOD1.func_2(file_1)
|
||||||
|
if read_2:
|
||||||
|
stats.append(('> KK', read_2))
|
||||||
|
|
||||||
|
if os.path.exists(file_2):
|
||||||
|
read_3 = MOD1.func_2(file_2)
|
||||||
|
if read_3:
|
||||||
|
stats.append(('≤ KK', read_3))
|
||||||
|
|
||||||
|
print("\nИсходный файл:")
|
||||||
|
if read_1:
|
||||||
|
a, b, c, d, e = read_1
|
||||||
|
print(f" Среднее: {a:.2f}")
|
||||||
|
print(f" Медиана: {b:.2f}")
|
||||||
|
print(f" От {c:.2f} до {d:.2f}")
|
||||||
|
print(f" Отклонение: {e:.2f}")
|
||||||
|
else:
|
||||||
|
print(" Не удалось рассчитать статистику")
|
||||||
|
|
||||||
|
print("\nФайл с числами > KK:")
|
||||||
|
if read_2:
|
||||||
|
a, b, c, d, e = read_2
|
||||||
|
print(f" Среднее: {a:.2f}")
|
||||||
|
print(f" Медиана: {b:.2f}")
|
||||||
|
print(f" От {c:.2f} до {d:.2f}")
|
||||||
|
print(f" Отклонение: {e:.2f}")
|
||||||
|
|
||||||
|
print("\nФайл с числами ≤ KK:")
|
||||||
|
if read_3:
|
||||||
|
a, b, c, d, e = read_3
|
||||||
|
print(f" Среднее: {a:.2f}")
|
||||||
|
print(f" Медиана: {b:.2f}")
|
||||||
|
print(f" От {c:.2f} до {d:.2f}")
|
||||||
|
print(f" Отклонение: {e:.2f}")
|
||||||
|
|
||||||
|
return file, stats
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
process_file()
|
||||||
Двоичный файл не отображается.
@ -0,0 +1,6 @@
|
|||||||
|
10.5 20.3 15.7 30.2
|
||||||
|
5.2 40.1 25.8
|
||||||
|
8.9 12.4 35.6 18.2 22.7
|
||||||
|
45.9 3.1 28.4
|
||||||
|
60.0 17.3 33.8
|
||||||
|
19.5 42.6
|
||||||
@ -0,0 +1 @@
|
|||||||
|
10.5 20.3 15.7 30.2 40.1 25.8 12.4 35.6 18.2 22.7 45.9 28.4 60.0 17.3 33.8 19.5 42.6
|
||||||
@ -0,0 +1 @@
|
|||||||
|
5.2 8.9 3.1
|
||||||
Загрузка…
Ссылка в новой задаче