форкнуто от main/python-labs
Родитель
3fe0c690df
Сommit
69f454c5ee
|
После Ширина: | Высота: | Размер: 42 KiB |
@ -1,112 +1,168 @@
|
||||
# Общее контрольное задание по теме 9
|
||||
Ефимова Людмила, А-03-23
|
||||
|
||||
Создайте и запишите в модуль класс, содержащий следующие компоненты:
|
||||
- конструктор, задающий четырем атрибутам (fio, otdel, dolzhnost, oklad), представляющим
|
||||
фамилии сотрудников, название отделов, названия должностей сотрудников и размеры их
|
||||
окладов, некоторые начальные значения;
|
||||
|
||||
- метод для обеспечения операции повышения оклада сотрудника на заданное значение;
|
||||
|
||||
- метод для обеспечения перевода сотрудника из одного отдела в другой;
|
||||
|
||||
- метод для изменения должности сотрудника;
|
||||
|
||||
- свойство, содержащее перечень (список) поощрений сотрудника.
|
||||
|
||||
Создайте 2 экземпляра класса, задайте им некоторые значения атрибутов и свойства.
|
||||
Отобразите эти значения. Попробуйте с этими экземплярами операции перевода из отдела в
|
||||
отдел, изменения должности и оклада, объявления благодарности.
|
||||
|
||||
## Решение
|
||||
|
||||
```py
|
||||
class Employee:
|
||||
def __init__(self, fio = "", otdel="", dolzhnost="",oklad=0):
|
||||
self.fio=fio
|
||||
self.otdel=otdel
|
||||
self.dolzhnost=dolzhnost
|
||||
self.oklad=oklad
|
||||
self.__pooshreniya=[]
|
||||
self.pooshreniya = property(
|
||||
self.get_pooshreniya,
|
||||
self.set_pooshreniya
|
||||
)
|
||||
def change_oklad(self, diff):
|
||||
self.oklad += diff
|
||||
def change_otdel(self, new_otdel):
|
||||
self.otdel = new_otdel
|
||||
def change_dolzhnost(self, new_dolzhnost):
|
||||
self.dolzhnost = new_dolzhnost
|
||||
def get_pooshreniya(self):
|
||||
return list(self.__pooshreniya)
|
||||
def set_pooshreniya(self,pooshrenie):
|
||||
self.__pooshreniya.append(pooshrenie)
|
||||
def get_employee_info(self):
|
||||
print(f"""
|
||||
ФИО: {self.fio}
|
||||
Отдел: {self.otdel}
|
||||
Должность: {self.dolzhnost}
|
||||
Оклад: {self.oklad} руб.
|
||||
Поощрения: {self.__pooshreniya}
|
||||
""")
|
||||
```
|
||||
|
||||
```py
|
||||
from Employee import Employee
|
||||
employee1 = Employee("Иванов И.И.", "Отдел ИИ", "Президент ИИ", 100000)
|
||||
employee2 = Employee("Володин Д.В.", "Отдел БЯМоведения", "программист БЯМов", 10000)
|
||||
|
||||
employee1.get_employee_info()
|
||||
|
||||
ФИО: Иванов И.И.
|
||||
Отдел: Отдел ИИ
|
||||
Должность: Президент ИИ
|
||||
Оклад: 100000 руб.
|
||||
Поощрения: []
|
||||
|
||||
employee2.get_employee_info()
|
||||
|
||||
ФИО: Володин Д.В.
|
||||
Отдел: Отдел БЯМоведения
|
||||
Должность: программист БЯМов
|
||||
Оклад: 10000 руб.
|
||||
Поощрения: []
|
||||
|
||||
employee1.change_otdel("Отдел по работе с роботами") # Изменим отдел
|
||||
employee1.change_oklad(1000)
|
||||
employee2.set_pooshreniya("Сертификат на кофеек")
|
||||
|
||||
employee1.get_employee_info() # Отображение полной информации об экземпляре класса
|
||||
|
||||
ФИО: Киреев Ю.П.
|
||||
Отдел: Отдел по работе с роботами
|
||||
Должность: Президент ИИ
|
||||
Оклад: 1000 руб.
|
||||
Поощрения: []
|
||||
|
||||
employee2.get_employee_info()
|
||||
|
||||
ФИО: Володин Д.В.
|
||||
Отдел: Отдел БЯМоведения
|
||||
Должность: программист БЯМов
|
||||
Оклад: 10000 руб.
|
||||
Поощрения: ['Сертификат на кофеек']
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Индивидуальное контрольное задание вариант 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'
|
||||
```
|
||||

|
||||
|
||||
Содержимое файла 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
|
||||
```
|
||||
Загрузка…
Ссылка в новой задаче