import random class Railway_ticket: """Документация класса билета на поезд id-номер билета price-цена билета name1,name2-имя,фамилия date_day,date_month,date_year-дата поезда time_hour_start,time_minutes_start-время отправления поезда time_hour_end,time_minutes_end-время прибытия поезда place-место в вагоне railway_carriage-номер вагона type_of_railway_carriage- тип вагона 1-Плацкарт(54) 2-КУпе(36) 3-Св(18) number_of_train-номер поезда type_of_ticket-тип билета 1-взрослый 2-детский 3-студенсткий 4-льготный """ id=0 price=-1 name1="" name2="" date_day=-1 date_month=-1 date_year=-1 time_hour_start=-1 time_minutes_start=-1 time_hour_end=-1 time_minutes_end=-1 place=-1 railway_carriage=-1 type_of_railway_carriage=-1 number_of_train=-1 type_of_ticket=-1 # до 129 строчки сеттеры def set_name1(self,n1): if type(n1)==type(int()) and type(n1)==type(float()): return -1 self.name1=n1 return self.date_day def set_name2(self,n2): if type(n2)==type(int()) and type(n2)==type(float()): return -1 self.name2=n2 return self.name2 def set_price(self,p): if type(p)!=type(int()) and type(p)!=type(float()): return -1 if p<0: return print("Некорректные данные") self.price=p return self.price def set_date_day(self,dd): if type(dd)!=type(int()) and type(dd)!=type(float()): return -1 if dd<=0 or dd>31: return print("Некорректные данные") self.date_day=dd return self.date_day def set_date_month(self,dm): if type(dm)!=type(int()) and type(dm)!=type(float()): return -1 if dm<=0 or dm>12: return print("Некорректные данные") self.date_month=dm return self.date_month def set_date_year(self,dy): if type(dy)!=type(int()) and type(dy)!=type(float()): return -1 if dy<2019: return print("Некорректные данные") self.date_year=dy return self.date_year def set_time_hour_start(self,th): if type(th)!=type(int()) and type(th)!=type(float()): return -1 if th<=0 or th>24: return print("Некорректные данные") self.time_hour_start=th return self.time_hour_start def set_time_minutes_start(self,tm): if type(tm)!=type(int()) and type(tm)!=type(float()): return -1 if tm<=0 or tm>60: return print("Некорректные данные") self.time_minutes_start=tm return self.time_minutes_start def set_time_hour_end(self,thE): if type(thE)!=type(int()) and type(thE)!=type(float()): return -1 if thE<=0 or thE>24: return print("Некорректные данные") self.time_hour_end=thE return self.time_hour_end def set_time_minutes_end(self,tmE): if type(tmE)!=type(int()) and type(tmE)!=type(float()): return -1 if tmE<=0 or tmE>60: return print("Некорректные данные") self.time_minutes_end=tmE return self.time_minutes_end def set_type_of_railway_carriage(self,tc): if type(tc)!=type(int()) and type(tc)!=type(float()): return -1 if tc<=0 or tc>3: return print("Некорректные данные") self.type_of_railway_carriage=tc return self.type_of_railway_carriage def set_place(self,pl): if type(pl)!=type(int()) and type(pl)!=type(float()): return -1 if pl<=0: return print("Некорректные данные") if self.type_of_railway_carriage==1 and pl>54: return print("Некорректные данные") if self.type_of_railway_carriage==2 and pl>36: return print("Некорректные данные") if self.type_of_railway_carriage==3 and pl>18: return print("Некорректные данные") self.place=pl return self.place def set_number_of_train(self,num): if type(num)!=type(int()) and type(num)!=type(float()): return -1 self.number_of_train=num return self.number_of_train def set_railway_carriage(self,rc): if type(rc)!=type(int()) and type(rc)!=type(float()): return -1 if rc<=0 or rc>50: return print("Некорректные данные") self.railway_carriage=rc return self.railway_carriage def set_type_of_ticket(self,tt): if type(tt)!=type(int()) and type(tt)!=type(float()): return -1 if tt<=0 or tt>4: return print("Некорректные данные") self.type_of_ticket=tt return self.type_of_ticket def type_of_travel(self): """Данный метод определяет ночной или дневной рейс""" if self.time_hour_end >=22 or self.time_hour_end <=6: print("Ночной рейс") else: print("Дневной рейс") def __init__(self,price,name1, name2, date_day, date_month, date_year, time_hour_start,time_minutes_start, time_hour_end,time_minutes_end,place, railway_carriage, type_of_railway_carriage,number_of_train,type_of_ticket): """Конструктор""" self.set_price(price) self.set_name1(name1) self.set_name2(name2) self.set_date_day(date_day) self.set_date_month(date_month) self.set_date_year(date_year) self.set_time_hour_start(time_hour_start) self.set_time_minutes_start(time_minutes_start) self.set_time_hour_end(time_hour_end) self.set_time_minutes_end(time_minutes_end) self.set_place(place) self.set_railway_carriage(railway_carriage) self.set_type_of_railway_carriage(type_of_railway_carriage) self.set_number_of_train(number_of_train) self.set_type_of_ticket(type_of_ticket) print("Конструктор выполнен") def __del__(self): print("Выполняется деструктор") def price_with_privilege(self): """Данный метод считает цену билета со скидкой в зависимости от соц.льгот """ if self.type_of_ticket==4: discount=(self.price/100)*50 price_with_discount=self.price-discount print("Льготный билет стоит=",price_with_discount) if self.type_of_ticket==3: discount=(self.price/100)*20 price_with_discount=self.price-discount print("Студенческий билет стоит=",price_with_discount) if self.type_of_ticket==2: discount=(self.price/100)*30 price_with_discount=self.price-discount print("Детский билет стоит=",price_with_discount) if self.type_of_ticket==1: print("У вас нету соц.льгот.Билет стоит=",self.price) '''def price_in_foreign_currency(self): """Данный метод переводит цену из грн в евро и доллары """ euro_price=self.price_with_privilege()/26 print("Цена билета в євро=",euro_price) usd_price=self.price_with_privilege()/24 print("Цена билета в долларах=",usd_price) По прежнему не работает ''' def id_up(self): """ДАнный метод выдает каждому билету рандомный ID в целях безопасности""" id=random.randint(0,1000000000) print("ID:",id) class Bank_operation(Railway_ticket): """Данный клас позволяет работать с банковскими картами""" number_of_card=-1 cvv2=-1 month_end=-1 year_end=-1 def set_number_of_card(self,num): if type(num)!=type(int()) and type(num)!=type(float()): return -1 list=[num] if len(list)>16 or len(list)<16: return print("Некорректные данные") self.number_of_card=list return self.number_of_card def set_cvv2(self,cvv): if type(cvv)!=type(int()) and type(cvv)!=type(float()): return -1 if cvv<100 or cvv>999: return print("Некорректные данные") self.cvv2=cvv return self.cvv2 def set_month_end(self,me): if type(me)!=type(int()) and type(me)!=type(float()): return -1 if me<=0 or me>12: return print("Некорректные данные") self.month_end=me return self.month_end def set_year_end(self,ye): if type(ye)!=type(int()) and type(ye)!=type(float()): return -1 if ye<2019: return print("Некорректные данные") self.year_end=ye return self.year_end def __init__(self,number_of_card,cvv2,month_end,year_end): """Конструктор""" self.set_number_of_card(number_of_card) self.set_cvv2(cvv2) self.set_month_end(month_end) self.set_year_end(year_end) print("Конструктор выполнен") def __del__(self): print("Выполняется деструктор") def type_of_bank_card(self,set_number_of_card): a=self.number_of_card if a[0]==3: print("Вы используете American Express") if a[0]==4: print("Вы используете Visa") if a[0]==5: print("Вы используете Master Card") else : print("Error") class Order_ticket(Railway_ticket): """Данный класс отвечает за заказ жд билета""" number_of_phone=-1 day_of_order_ticket=-1 month_of_order_ticket=-1 year_of_order_ticket=-1 minutes_of_order_ticket=-1 hours_of_order_ticket=-1 def set_number_of_phone(self,nu): if type(nu)!=type(int()) and type(nu)!=type(float()): return -1 if nu<=000000000 or nu>999999999: return print("Некорректные данные") self.number_of_phone=nu return self.number_of_phone def set_day_of_order_ticket(self,dot): if type(dot)!=type(int()) and type(dot)!=type(float()): return -1 if dot<=0 or dot>31: return print("Некорректные данные") self.day_of_order_ticket=dot return self.day_of_order_ticket def set_month_of_order_ticket(self,mot): if type(mot)!=type(int()) and type(mot)!=type(float()): return -1 if mot<=0 or mot>12: return print("Некорректные данные") self.month_of_order_ticket=mot return self.month_of_order_ticket def set_year_of_order_ticket(self,yot): if type(yot)!=type(int()) and type(yot)!=type(float()): return -1 if yot<2019: return print("Некорректные данные") self.year_of_order_ticket=yot return self.year_of_order_ticket def set_hours_of_order_ticket(self,tot): if type(tot)!=type(int()) and type(tot)!=type(float()): return -1 if tot<=0 or tot>24: return print("Некорректные данные") self.hours=tot return self.hours def set_time_of_order_ticket_minutes(self,totm): if type(totm)!=type(int()) and type(totm)!=type(float()): return -1 if totm<=0 or totm>60: return print("Некорректные данные") self.minutes_of_order_ticket=totm return self.minutes_of_order_ticket def __init__(self,number_of_phone,month_of_order_ticket,day_of_order_ticket,year_of_order_ticket,hours_of_order_ticket,minutes_of_order_ticket): self.set_number_of_phone(number_of_phone) self.set_month_of_order_ticket(month_of_order_ticket) self.set_year_of_order_ticket(year_of_order_ticket) self.set_day_of_order_ticket(day_of_order_ticket) self.set_hours_of_order_ticket(hours_of_order_ticket) self.set_time_of_order_ticket_minutes(minutes_of_order_ticket) print("Конструктор выполнен") def __del__(self): print("Деструктор выполнен") def type_of_day_ticket(self,hours_of_order_ticket): if self.hours_of_order_ticket>=18: print("Билет заказан вечером") if self.hours_of_order_ticket<=8: print("Билет заказан утром")[code python][/code] if self.hours_of_order_ticket>=9 and self.hours_of_order_ticket <=17: print("Билет заказан днем") test=Bank_operation(5168148814881488,797,10,2020) test.type_of_bank_card print(Railway_ticket.__doc__)
Лабораторная 1
Задание 1. Разработать класс, описывающий некоторый объект из заданной предметной области. Класс должен содержать: – строку документации; – не менее 10 атрибутов (переменных); – не менее 5 методов (из которых хотя бы один описан вне класса), выполняющих обработку атрибутов класса;
– сеттеры (методы изменения значений) для тех атрибутов класса, для которых теоретически могут быть заданы недопустимые значения. 2. В основной программе выполнить следующее: 2.1. Вывести на экран документацию класса. 2.2. Создать и инициализировать различными значениями пять экземпляров разработанного класса. 2.3. Создать и инициализировать псевдослучайными значениями одномерный массив из 100 экземпляров класса. 2.4. Создать и инициализировать псевдослучайными значениями двумерный массив из 100*100 экземпляров класса. 2.5. В созданном одномерном массиве упорядочить элементы по возрастанию одного из атрибутов класса (на свое усмотрение). 2.6. В созданном двумерном массиве найти элементы с максимальным и минимальным значениями одного из атрибутов класса (на свое усмотрение). 2.7. Удалить из памяти двумерный массив, одномерный массив, а также все одиночные экземпляры класса с помощью стандартной функции del.
Лабораторная работа №2
Конструкторы и деструкторы
Исходными данными для выполнения лабораторной работы является программа, разработанная в лабораторной работе №1.
Задание
1. Добавить в класс конструктор, выполняющий инициализацию всех или некоторых атрибутов экземпляра класса. Те атрибуты, которые инициализируются в конструкторе, удалить из описания класса.
2. Сделать так, чтобы инициализация атрибутов в конструкторе выполнялась с помощью сеттеров.
3. Добиться того, чтобы при создании одномерного массива (списка) из 100 экземпляров класса конструктор вызывался при создании каждого элемента массива.
4. Добиться того, чтобы при создании двумерного массива (списка списков) размерностью 100 на 100 экземпляров класса конструктор вызывался при создании каждого элемента массива.
5. Добавить в класс деструктор (финализатор). В теле деструктора реализовать вывод сообщения о том, что деструктор выполнился. Убедиться, что при завершении программы деструктор вызывается для каждого элемента одномерного и двумерного массивов.
Лабораторная 3
Создать иерархию классов с использованием механизма наследования. В качестве базового класса должен выступать класс, разработанный в лабораторной работе №2. Иерархия классов должна отвечать следующим требованиям:
1. В иерархии должно быть не менее двух уровней и не менее четырех классов (вместе с базовым классом).
2. Каждый класс-потомок должен содержать хотя бы один собственный атрибут и хотя бы один метод.
3. В каждом классе-потомке должен быть собственный конструктор.
В основной программе подготовить небольшой демонстрационный пример, показывающий возможности работы с классами-потомками: создание экземпляра класса-потомка, доступ к атрибутам и методам класса-предка, порядок вызова конструкторов и т.п.