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