форкнуто от main/python-labs
Родитель
69f454c5ee
Сommit
f413813ffb
@ -1,168 +1,168 @@
|
|||||||
# Индивидуальное контрольное задание вариант 2
|
# Модуль 3 варианть 2
|
||||||
Ефимова Людмила, А-03-23
|
Ефимова Людмила, А-03-23
|
||||||
|
|
||||||
Создайте модуль М1, содержащий две функции:
|
Создайте модуль М1, содержащий две функции:
|
||||||
|
|
||||||
- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК;
|
- функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК;
|
||||||
считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его.
|
считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его.
|
||||||
Исходные данные в виде списка возвращаются в вызывающую программу;
|
Исходные данные в виде списка возвращаются в вызывающую программу;
|
||||||
|
|
||||||
- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции.
|
- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции.
|
||||||
```py
|
```py
|
||||||
import math
|
import math
|
||||||
import statistics
|
import statistics
|
||||||
|
|
||||||
def func1(filename, KK):
|
def func1(filename, KK):
|
||||||
with open(filename, 'r', encoding = 'utf-8') as f:
|
with open(filename, 'r', encoding = 'utf-8') as f:
|
||||||
nums = []
|
nums = []
|
||||||
for i in f:
|
for i in f:
|
||||||
nums_line = list(map(float,line.strip().split()))
|
nums_line = list(map(float,line.strip().split()))
|
||||||
nums.extend(nums_line)
|
nums.extend(nums_line)
|
||||||
|
|
||||||
above = []
|
above = []
|
||||||
below = []
|
below = []
|
||||||
for n in nums:
|
for n in nums:
|
||||||
if n > KK:
|
if n > KK:
|
||||||
above.append(n)
|
above.append(n)
|
||||||
else:
|
else:
|
||||||
below.append(n)
|
below.append(n)
|
||||||
|
|
||||||
|
|
||||||
x = filename.split('.')[0]
|
x = filename.split('.')[0]
|
||||||
with open(x + '1.txt') as f: # запись в новый файл превышающих
|
with open(x + '1.txt') as f: # запись в новый файл превышающих
|
||||||
for num in above:
|
for num in above:
|
||||||
f.write(str(num) +'\n')
|
f.write(str(num) +'\n')
|
||||||
|
|
||||||
with open(x + '2.txt') as f: # запись в новый файл не превышающих
|
with open(x + '2.txt') as f: # запись в новый файл не превышающих
|
||||||
for num in below:
|
for num in below:
|
||||||
f.write(str(num) +'\n')
|
f.write(str(num) +'\n')
|
||||||
|
|
||||||
return nums
|
return nums
|
||||||
|
|
||||||
def func2(filename):
|
def func2(filename):
|
||||||
with open(filename, 'r', encoding = 'utf-8') as f:
|
with open(filename, 'r', encoding = 'utf-8') as f:
|
||||||
nums = []
|
nums = []
|
||||||
for i in f:
|
for i in f:
|
||||||
nums_line = list(map(float,line.strip().split()))
|
nums_line = list(map(float,line.strip().split()))
|
||||||
nums.extend(nums_line)
|
nums.extend(nums_line)
|
||||||
n = len(nums)
|
n = len(nums)
|
||||||
mean = sum(nums)/n
|
mean = sum(nums)/n
|
||||||
|
|
||||||
median = statistics.median(nums) # медиана
|
median = statistics.median(nums) # медиана
|
||||||
std = statistics.stdev(nums) # стандартное отклонение
|
std = statistics.stdev(nums) # стандартное отклонение
|
||||||
print(mean, median, min(nums), max(nums), std)
|
print(mean, median, min(nums), max(nums), std)
|
||||||
|
|
||||||
return [mean, median, min(nums), max(nums), std]
|
return [mean, median, min(nums), max(nums), std]
|
||||||
```
|
```
|
||||||
|
|
||||||
Создайте еще один модуль М2, в котором должны:
|
Создайте еще один модуль М2, в котором должны:
|
||||||
|
|
||||||
- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
|
- запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
|
||||||
|
|
||||||
- запрос порогового значения КК;
|
- запрос порогового значения КК;
|
||||||
|
|
||||||
- вызов функции 1 с указанным именем;
|
- вызов функции 1 с указанным именем;
|
||||||
|
|
||||||
- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.
|
- трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.
|
||||||
|
|
||||||
```py
|
```py
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from M1 import func1, func2
|
from M1 import func1, func2
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
while True:
|
while True:
|
||||||
filename = input("Исходный файл: ")
|
filename = input("Исходный файл: ")
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
break
|
break
|
||||||
print("Нет такого файла...")
|
print("Нет такого файла...")
|
||||||
|
|
||||||
KK = float(input("Введите пороговое значение K: "))
|
KK = float(input("Введите пороговое значение K: "))
|
||||||
data = func1(filename, KK)
|
data = func1(filename, KK)
|
||||||
|
|
||||||
x = filename.split('.')[0]
|
x = filename.split('.')[0]
|
||||||
|
|
||||||
print("CТАТИСТИКИ")
|
print("CТАТИСТИКИ")
|
||||||
print("1. Исходный файл: ", func2(filename))
|
print("1. Исходный файл: ", func2(filename))
|
||||||
print("2. Выше порога: ", func2(x + '1.txt'))
|
print("2. Выше порога: ", func2(x + '1.txt'))
|
||||||
print("3. Ниже порога: ", func2(x + '2.txt'))
|
print("3. Ниже порога: ", func2(x + '2.txt'))
|
||||||
|
|
||||||
return data
|
return data
|
||||||
```
|
```
|
||||||
|
|
||||||
Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin.
|
Создайте модуль М0 - главную программу, которая вызывает М2, отображает исходные данные в виде графика и записывает их в бинарный файл RES2a.bin.
|
||||||
```py
|
```py
|
||||||
import M2
|
import M2
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import pickle
|
import pickle
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
data = M2.main()
|
data = M2.main()
|
||||||
|
|
||||||
print("ГРАФИК:")
|
print("ГРАФИК:")
|
||||||
|
|
||||||
plt.figure(figsize=(12, 5))
|
plt.figure(figsize=(12, 5))
|
||||||
plt.plot(numbers)
|
plt.plot(numbers)
|
||||||
plt.axhline(y=k, color='r')
|
plt.axhline(y=k, color='r')
|
||||||
plt.title(f"Данные из файла: {filename}")
|
plt.title(f"Данные из файла: {filename}")
|
||||||
plt.xlabel("Номер элемента")
|
plt.xlabel("Номер элемента")
|
||||||
plt.ylabel("Значение")
|
plt.ylabel("Значение")
|
||||||
plt.grid(True)
|
plt.grid(True)
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
with open("Res2a.bin", 'wb') as f:
|
with open("Res2a.bin", 'wb') as f:
|
||||||
pickle.dump(data, f)
|
pickle.dump(data, f)
|
||||||
```
|
```
|
||||||
Подготовьте файл с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ним разработанную программу.
|
Подготовьте файл с не менее, чем с 20 числовыми значениями с разным числом элементов на разных строках и проверьте с ним разработанную программу.
|
||||||
Создала файл datatest.txt с содержимым
|
Создала файл datatest.txt с содержимым
|
||||||
```py
|
```py
|
||||||
10 20 30 20
|
10 20 30 20
|
||||||
22 33
|
22 33
|
||||||
60 70 80 90
|
60 70 80 90
|
||||||
15 23 25 27 76
|
15 23 25 27 76
|
||||||
5 12 34 67 36
|
5 12 34 67 36
|
||||||
```
|
```
|
||||||
|
|
||||||
Результат работы программы
|
Результат работы программы
|
||||||
```py
|
```py
|
||||||
Введите имя файла (например: data.txt): datatest.txt
|
Введите имя файла (например: data.txt): datatest.txt
|
||||||
Введите пороговое значение K: 23
|
Введите пороговое значение K: 23
|
||||||
|
|
||||||
СТАТИСТИКИ:
|
СТАТИСТИКИ:
|
||||||
1. Исходный файл: Среднее: 37.75, Медиана: 28.50, Мин: 5.00, Макс: 90.00, Отклонение: 26.02
|
1. Исходный файл: Среднее: 37.75, Медиана: 28.50, Мин: 5.00, Макс: 90.00, Отклонение: 26.02
|
||||||
2. Выше порога: Среднее: 52.33, Медиана: 48.00, Мин: 25.00, Макс: 90.00, Отклонение: 23.73
|
2. Выше порога: Среднее: 52.33, Медиана: 48.00, Мин: 25.00, Макс: 90.00, Отклонение: 23.73
|
||||||
3. Ниже порога: Среднее: 15.88, Медиана: 17.50, Мин: 5.00, Макс: 23.00, Отклонение: 6.45
|
3. Ниже порога: Среднее: 15.88, Медиана: 17.50, Мин: 5.00, Макс: 23.00, Отклонение: 6.45
|
||||||
|
|
||||||
ГРАФИК:
|
ГРАФИК:
|
||||||
Данные сохранены в файл 'Res2a.bin'
|
Данные сохранены в файл 'Res2a.bin'
|
||||||
```
|
```
|
||||||

|

|
||||||
|
|
||||||
Содержимое файла above:
|
Содержимое файла above:
|
||||||
|
|
||||||
```py
|
```py
|
||||||
30.0
|
30.0
|
||||||
33.0
|
33.0
|
||||||
60.0
|
60.0
|
||||||
70.0
|
70.0
|
||||||
80.0
|
80.0
|
||||||
90.0
|
90.0
|
||||||
25.0
|
25.0
|
||||||
27.0
|
27.0
|
||||||
76.0
|
76.0
|
||||||
34.0
|
34.0
|
||||||
67.0
|
67.0
|
||||||
36.0
|
36.0
|
||||||
```
|
```
|
||||||
Содержимое файла below:
|
Содержимое файла below:
|
||||||
|
|
||||||
```py
|
```py
|
||||||
10.0
|
10.0
|
||||||
20.0
|
20.0
|
||||||
20.0
|
20.0
|
||||||
22.0
|
22.0
|
||||||
15.0
|
15.0
|
||||||
23.0
|
23.0
|
||||||
5.0
|
5.0
|
||||||
12.0
|
12.0
|
||||||
```
|
```
|
||||||
Загрузка…
Ссылка в новой задаче