Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Міністерство освіти і науки України

Державний університет ,,Житомирська політехніка”

Кафедра КН
Група: ІСТ-22-1

Програмування мовою Python


Лабораторна робота № 7
«Класи Ч.1»

Виконав: Ковальчук М. М.
Прийняв: Окунькова О. О.

ІРТР.420001.123-ЗЛ
Змн. Арк. № докум. Підпис Дата
Розроб. Ковальчук М. М. Літ. Арк. Аркушів
Перевір. .Окунькова О. О. 1
Звіт з
Керівник
лабораторної роботи
Н. контр. ФІКТ, гр. ІСТ-22-1
Затверд.
Мета роботи: ознайомитися з ООП в мові Python
Виконання роботи:
Завдання 1. Реалізувати клас Person, який відображає запис в книзі контактів.
Клас має 4 атрибута:
- surname - рядок - прізвище контакту (обов'язковий)
- first_name - рядок - ім'я контакту (обов'язковий)
- nickname - рядок - псевдонім (опціональний)
- birth_date - об'єкт datetime.date (обов'язковий)
Кожен виклик класу повинен створювати екземпляр (інстанс) класу із
зазначеними атрибутами.
Також клас має 2 методи:
- get_age() - рахує вік особи в повних роках на дату виклику і повертає рядок
виду: "25";
- get_fullname() - повертає рядок, що відображає повне ім'я (прізвище + ім'я)
контакту;
Примітка:
при створенні атрибута birth_date з рядка типу "2002-12-31" необхідно:
- визначити яка інформація потрібна для створення об'єкта datetime.date,
- отримати ці дані з рядка
- розібрати її (дістати з неї окремо, рік, місяць, число),
- на підставі цієї інформації створити спеціальний об'єкт datetime.date,
- помістити цей спец.об'ект в атрибут екземпляра класу
Лістинг програми:
from datetime import *

class Person:
def __init__(self, surname, first_name, birth_date,
nickname=''):
self.surname = surname
self.first_name = first_name
self.birth_date = birth_date.date()
self.nickname = nickname

def get_age(self):
today = datetime.now().date()
age = today.year - self.birth_date.year
return age
def get_fullname(self):
fullname = self.surname + " " + self.first_name
return fullname
pSurname = input("Введіть прізвище: ")
pName = input("Введіть ім'я: ")
pNickname = input("Введіть nickname: ")
db = input("Введіть дату народження у форматі YYYY-MM-DD:
").split('-')
pDB = datetime(int(date[0]), int(date[1]), int(date[2]))
person = Person(pSurname, pName, pDB, pNickname)

Арк.
ІРТР.420001.123-ЗЛ 2
Змн. Арк. № докум. Підпис Дата
print(f"{person.get_fullname()}, nickname: {person.nickname},
{person.get_age()} years old.")

Рис.1. Результат виконання першої програми


Завдання 2. Написати функцію modifier(filename), яка приймає ім'я файлу і
повинна:
- прочитати дані з переданого файлу;
- створити об'єкти класу Person на підставі отриманих даних;
- модифікувати дані в файлі:
а) додати графу повного імені (fullname) після графи з ім'ям (name)
б) додати графу з віком (age) в кінець.
На виході отримати файл, розширений зазначеним чином.
Лістинг програми:
from datetime import *

class Person:
def __init__(self, surname, first_name, birth_date,
nickname=''):
self.surname = surname
self.first_name = first_name
self.birth_date = birth_date.date()
self.nickname = nickname

def get_age(self):
today = datetime.now().date()
age = today.year - self.birth_date.year
return age

def modifier(filename):
with open(filename, 'r') as file:
lines = file.readlines()

list1 = []

for i in lines:
data = i.strip().split(', ')
if len(data) == 4:
surname, first_name, birth_date, nickname = data
dateBD = birth_date.split('-')
birth_date = datetime(int(dateBD[0]), int(dateBD[1]),
int(dateBD[2]))
person = Person(surname, first_name, birth_date,
nickname)

Арк.
ІРТР.420001.123-ЗЛ 3
Змн. Арк. № докум. Підпис Дата
fullname = person.surname + " " + person.first_name
age = person.get_age()
BD = person.birth_date.strftime("%Y-%m-%d")
list1.append(f"{surname}\n{first_name}\n{fullname}\
n{BD}\n{nickname}\n{age}\n")
print(fullname)
else:
list1.append(i)
print('j')

with open(filename, 'w') as file:


file.writelines(list1)

filename = "checkFile.txt"
modifier(filename)

Рис.2. Результат виконання другої програми

Арк.
ІРТР.420001.123-ЗЛ 4
Змн. Арк. № докум. Підпис Дата

You might also like