EfimovaLA 3 недель назад
Родитель 3fe0c690df
Сommit 69f454c5ee

Двоичные данные
TEMA9/Ris10.PNG

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 42 KiB

@ -1,112 +1,168 @@
# Общее контрольное задание по теме 9 # Индивидуальное контрольное задание вариант 2
Ефимова Людмила, А-03-23 Ефимова Людмила, А-03-23
Создайте и запишите в модуль класс, содержащий следующие компоненты: Создайте модуль М1, содержащий две функции:
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим
фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их - функция 1: аргументы - имя текстового файла с числовыми данными (может быть разное число значений на каждой строке) и пороговое значение КК;
окладов, некоторые начальные значения; считываются значения из указанного файла и записываются в два новых текстовых файла, имена которых совпадают с именем входного файла с добавлением 1 и 2 - в первый файл записываются значения, превышающие заданный порог, а во второй - не превышающие его.
Исходные данные в виде списка возвращаются в вызывающую программу;
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
- функция 2: аргумент - имя текстового файла с исходными данными; считываются значения из указанного файла, формируются в виде списка и по нему рассчитываются: среднее, медиана, наименьшее и наибольшее значения, стандартное отклонение - это возвращаемые результаты функции.
- метод для обеспечения перевода сотрудника из одного отдела в другой; ```py
import math
- метод для изменения должности сотрудника; import statistics
- свойство, содержащее перечень (список) поощрений сотрудника. def func1(filename, KK):
with open(filename, 'r', encoding = 'utf-8') as f:
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства. nums = []
Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в for i in f:
отдел, изменения должности и оклада, объявления благодарности. nums_line = list(map(float,line.strip().split()))
nums.extend(nums_line)
## Решение
above = []
```py below = []
class Employee: for n in nums:
def __init__(self, fio = "", otdel="", dolzhnost="",oklad=0): if n > KK:
self.fio=fio above.append(n)
self.otdel=otdel else:
self.dolzhnost=dolzhnost below.append(n)
self.oklad=oklad
self.__pooshreniya=[]
self.pooshreniya = property( x = filename.split('.')[0]
self.get_pooshreniya, with open(x + '1.txt') as f: # запись в новый файл превышающих
self.set_pooshreniya for num in above:
) f.write(str(num) +'\n')
def change_oklad(self, diff):
self.oklad += diff with open(x + '2.txt') as f: # запись в новый файл не превышающих
def change_otdel(self, new_otdel): for num in below:
self.otdel = new_otdel f.write(str(num) +'\n')
def change_dolzhnost(self, new_dolzhnost):
self.dolzhnost = new_dolzhnost return nums
def get_pooshreniya(self):
return list(self.__pooshreniya) def func2(filename):
def set_pooshreniya(self,pooshrenie): with open(filename, 'r', encoding = 'utf-8') as f:
self.__pooshreniya.append(pooshrenie) nums = []
def get_employee_info(self): for i in f:
print(f""" nums_line = list(map(float,line.strip().split()))
ФИО: {self.fio} nums.extend(nums_line)
Отдел: {self.otdel} n = len(nums)
Должность: {self.dolzhnost} mean = sum(nums)/n
Оклад: {self.oklad} руб.
Поощрения: {self.__pooshreniya} median = statistics.median(nums) # медиана
""") std = statistics.stdev(nums) # стандартное отклонение
``` print(mean, median, min(nums), max(nums), std)
```py return [mean, median, min(nums), max(nums), std]
from Employee import Employee ```
employee1 = Employee("Иванов И.И.", "Отдел ИИ", "Президент ИИ", 100000)
employee2 = Employee("Володин Д.В.", "Отдел БЯМоведения", "программист БЯМов", 10000) Создайте еще один модуль М2, в котором должны:
employee1.get_employee_info() - запрашиваться имя файла с исходными данными, проверяться его наличие и при отсутствии - повторение запроса;
ФИО: Иванов И.И. - запрос порогового значения КК;
Отдел: Отдел ИИ
Должность: Президент ИИ - вызов функции 1 с указанным именем;
Оклад: 100000 руб.
Поощрения: [] - трижды вызвать функцию 2: с именем указанного в ответе на запрос файла, а также с каждым из файлов, созданных в функции 1; отобразить результаты расчетов.
employee2.get_employee_info() ```py
import os
ФИО: Володин Д.В.
Отдел: Отдел БЯМоведения from M1 import func1, func2
Должность: программист БЯМов
Оклад: 10000 руб. def main():
Поощрения: [] while True:
filename = input("Исходный файл: ")
employee1.change_otdel("Отдел по работе с роботами") # Изменим отдел if os.path.exists(filename):
employee1.change_oklad(1000) break
employee2.set_pooshreniya("Сертификат на кофеек") print("Нет такого файла...")
employee1.get_employee_info() # Отображение полной информации об экземпляре класса KK = float(input("Введите пороговое значение K: "))
data = func1(filename, KK)
ФИО: Киреев Ю.П.
Отдел: Отдел по работе с роботами x = filename.split('.')[0]
Должность: Президент ИИ
Оклад: 1000 руб. print("CТАТИСТИКИ")
Поощрения: [] print("1. Исходный файл: ", func2(filename))
print("2. Выше порога: ", func2(x + '1.txt'))
employee2.get_employee_info() print("3. Ниже порога: ", func2(x + '2.txt'))
ФИО: Володин Д.В. return data
Отдел: Отдел БЯМоведения ```
Должность: программист БЯМов
Оклад: 10000 руб. Создайте модуль М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
```
Загрузка…
Отмена
Сохранить