Пользователь № 7 аудитории Ж-206 3 дней назад
Родитель cac2f4e015
Сommit 2f5ad95d89

@ -0,0 +1,12 @@
import module3M2
def main():
print('Расчет 1')
module3M2.process()
print('\n' + '_+++++++++_')
print('\n Расчет 2')
module3M2.process()

@ -0,0 +1,3 @@
12 15 17 18 14
18 9 15 26 7
12 17 18 6 2

@ -0,0 +1,4 @@
20 20 40 41 35
26 27 50 34 38
25 48 65 54 29
29 21 17 18 20

@ -0,0 +1,50 @@
import math
def calc(sample):
minimum =min(sample)
maximum=max(sample)
print(minimum,maximum)
ran = maximum-minimum
n= len(sample)
mean = sum(sample)/n
sum1 = 0
for i in range(n):
sum1 = (sample[i]-mean)**2
std_dev = math.sqrt(1/n*sum1)
ratio = ran/std_dev if std_dev != 0 else 0
return {'min': minimum, 'max': maximum, 'range': ran, 'deviation': std_dev,'range to stddev': ratio, 'samplesize': n}
def intervals(sample,m):
stats =calc(sample)
minimum = stats['min']
maximum =stats['max']
sortedsam = sorted(sample)
n=len(sortedsam)
width =(maximum-minimum)/m
bounds = [minimum + i*width for i in range(m+1)]
c = [0]*m
s = 0
for i in range(m):
lower = bounds[i]
upper = bounds[i+1]
while s < n and sortedsam[s] <= upper:
if i ==m-1:
if sortedsam[s] >= lower:
c[i]+=1
else:
if lower <=sortedsam[s] < upper:
c[i]+=1
s +=1
return bounds, c

@ -0,0 +1,49 @@
import os
import module3M1
def reader(filename):
sample = []
with open(filename, 'r', encoding = 'utf-8') as file:
for line in file:
vals = line.strip().split()
for val in vals:
sample.append(float(val))
return sample
def display(bounds,c):
maxcount =max(c)
for i,count in enumerate(c):
lowers = bounds[i]
uppers =bounds[i+1]
bar = '[|]'*int(count)
print(f'({lowers}, {uppers}) : {count} элементов | {bar}')
def process():
while True:
filename = input('Имя файла:')
if os.path.exists(filename):
break
print(f'Еще раз, {filename} неверное название')
sample = reader(filename)
while True:
m =int(input('Введите число разбиений'))
if m > 0:
break
else:
('Введите ненулевое целое значение')
stats =module3M1.calc(sample)
print('Максимум: ', stats['max'])
print('Минимум: ', stats['min'])
print('Размах: ', stats['range'])
print('СО: ', stats['deviation'])
print('Отношение размаха к отклоеннию: ', stats['range to stddev'])
bounds, c = module3M1.intervals(sample,m)
display(bounds,c)

@ -0,0 +1,190 @@
# Тест по модулю 3
Савин Семён, А-02-23
## Задание
M3_14
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргумент - список или кортеж с выборкой; функция должна произвести расчет по выборке списка с наименьшим и наибольшим значениями, размахом (разность наибольшего и наименьшего значений), оценкой стандартного отклонения и отношением размаха к стандартному отклонению;
- функция 2: аргументы - список или кортеж с выборкой и целочисленный параметр m; функция должна обратиться к функции 1 и затем определить границы m непересекающихся интервалов в диапазоне величины между наибольшим и наименьшим значениями по выборке, содержащих примерно одинаковое число элементов выборки; функция должна вернуть 2 списка: со значениями границ интервалов и с числами элементов в интервалах.
2) Создайте еще один модуль М2, в котором должны выполняться следующие операции:
- запрашивается имя текстового файла с выборкой, проверяется его наличие и при отсутствии - повторяется запрос;
- выборка вводится из файла и записывается в список (в строках файла может быть разное число значений, разделенных пробелами);
- запрашиваются у пользователя число интервалов разбиения;
- с помощью функций 1 и 2 производится определение границ интервалов и чисел элементов в них;
- отображается столбиковая диаграмма с интервалами и числами элементов выборки в них.
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает результаты расчета на экране.
4) Проведите расчеты при 2-х разных файлах с выборками
## Решение
Содержимое модуля module3M1.py - расчеты
```py
import math
def calc(sample):
minimum =min(sample)
maximum=max(sample)
print(minimum,maximum)
ran = maximum-minimum
n= len(sample)
mean = sum(sample)/n
sum1 = 0
for i in range(n):
sum1 = (sample[i]-mean)**2
std_dev = math.sqrt(1/n*sum1)
ratio = ran/std_dev if std_dev != 0 else 0
return {'min': minimum, 'max': maximum, 'range': ran, 'deviation': std_dev,'range to stddev': ratio, 'samplesize': n}
def intervals(sample,m):
stats =calc(sample)
minimum = stats['min']
maximum =stats['max']
sortedsam = sorted(sample)
n=len(sortedsam)
width =(maximum-minimum)/m
bounds = [minimum + i*width for i in range(m+1)]
c = [0]*m
s = 0
for i in range(m):
lower = bounds[i]
upper = bounds[i+1]
while s < n and sortedsam[s] <= upper:
if i ==m-1:
if sortedsam[s] >= lower:
c[i]+=1
else:
if lower <=sortedsam[s] < upper:
c[i]+=1
s +=1
return bounds, c
```
Содержимое модуля module3M2.py - чтение, вывод, обработка данных и передача в M1
```py
import os
import module3M1
def reader(filename):
sample = []
with open(filename, 'r', encoding = 'utf-8') as file:
for line in file:
vals = line.strip().split()
for val in vals:
sample.append(float(val))
return sample
def display(bounds,c):
maxcount =max(c)
for i,count in enumerate(c):
lowers = bounds[i]
uppers =bounds[i+1]
bar = '[|]'*int(count)
print(f'({lowers}, {uppers}) : {count} элементов | {bar}')
def process():
while True:
filename = input('Имя файла:')
if os.path.exists(filename):
break
print(f'Еще раз, {filename} неверное название')
sample = reader(filename)
while True:
m =int(input('Введите число разбиений'))
if m > 0:
break
else:
('Введите ненулевое целое значение')
stats =module3M1.calc(sample)
print('Максимум: ', stats['max'])
print('Минимум: ', stats['min'])
print('Размах: ', stats['range'])
print('СО: ', stats['deviation'])
print('Отношение размаха к отклоеннию: ', stats['range to stddev'])
bounds, c = module3M1.intervals(sample,m)
display(bounds,c)
```
Главные модуль вызова:
```py
import module3M2
def main():
print('Расчет 1')
module3M2.process()
print('\n' + '_+++++++++_')
print('\n Расчет 2')
module3M2.process()
```
Вывод в консоли:
```py
>>> main()
Расчет 1
Имя файла:mod3.txt
Введите число разбиений5
2.0 26.0
Максимум: 26.0
Минимум: 2.0
Размах: 24.0
СО: 3.0295336397000234
Отношение размаха к отклоеннию: 7.922011389969717
2.0 26.0
(2.0, 6.8) : 2 элементов | [|][|]
(6.8, 11.6) : 2 элементов | [|][|]
(11.6, 16.4) : 5 элементов | [|][|][|][|][|]
(16.4, 21.2) : 5 элементов | [|][|][|][|][|]
(21.2, 26.0) : 1 элементов | [|]
_+++++++++_
Расчет 2
Имя файла:mod31.txt
Введите число разбиений6
17.0 65.0
Максимум: 65.0
Минимум: 17.0
Размах: 48.0
СО: 2.8733473510872303
Отношение размаха к отклоеннию: 16.705254929181304
17.0 65.0
(17.0, 25.0) : 6 элементов | [|][|][|][|][|][|]
(25.0, 33.0) : 4 элементов | [|][|][|][|]
(33.0, 41.0) : 4 элементов | [|][|][|][|]
(41.0, 49.0) : 1 элементов | [|]
(49.0, 57.0) : 2 элементов | [|][|]
(57.0, 65.0) : 1 элементов | [|]
```
Загрузка…
Отмена
Сохранить