Изменил(а) на 'TEMA9/task9.md'

main
EfimovaLA 4 недель назад
Родитель 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'
``` ```
![Скриншот построенного графика](Ris10.PNG) ![Скриншот построенного графика](Ris10.PNG)
Содержимое файла 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
``` ```
Загрузка…
Отмена
Сохранить