Найти - Пользователи
Полная версия: Ребята посмотрите код вроде все правильно сделал почему-то не запускается
Начало » Python для новичков » Ребята посмотрите код вроде все правильно сделал почему-то не запускается
1
dinamo2018
 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. В каждом классе-потомке должен быть собственный конструктор.
В основной программе подготовить небольшой демонстрационный пример, показывающий возможности работы с классами-потомками: создание экземпляра класса-потомка, доступ к атрибутам и методам класса-предка, порядок вызова конструкторов и т.п.
PEHDOM
все запускается… другое дело что оно не делает то что вы хотите, но тут туж…
 test.type_of_bank_card
по моему не хватает аргуентов, ведь type_of_bank_cardу вас метод класса…
def type_of_bank_card(self,set_number_of_card):

 class Bank_operation(Railway_ticket):
    """Данный клас позволяет работать с банковскими картами"""
...
class Order_ticket(Railway_ticket):
    """Данный класс отвечает за заказ жд билета"""
ИМХО плохая идея наследовать класс “банковская операция” и “заказ билетов” от “ЖД билет”

В итоге у вас здоровая простыня текста из которой вообще непонятно что и как должно делаться.. Давайте начнем по порядку: приведите кусок кода который выполняет следующее:
Задание 1. Разработать класс, описывающий некоторый объект из заданной предметной области. Класс должен содержать: – строку документации; – не менее 10 атрибутов (переменных); – не менее 5 методов (из которых хотя бы один описан вне класса), выполняющих обработку атрибутов класса;
– сеттеры (методы изменения значений) для тех атрибутов класса, для которых теоретически могут быть заданы недопустимые значения.
ЗЫ честно говоря ХЗ чему вас там учат, но в моем понимании сеттеры тесно связаны с property()
https://docs.python.org/3/library/functions.html#property

FishHook
dinamo2018
Это, простите, калиброванный говнокод.
1.
        return print("Некорректные данные")
Вы таким образом None из функции возвращаете что ли? Вы съэкономили целую строку, но только сделали явное неявным.
2. Какого черта сеттер возвращает значение? Да еще и какие-то минус единицы. Как вы опишите тип этой функции?
     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
у вас функция возвращает либо integer, либо None, либо некий объект. Вам кажется нормальным иметь такие интерфейсы? Вы бы сами хотели работать с библиотечной функцией, которая бы имела такое поведение?

Зачем это вообще? Вместо непонятных -1 кидайте исключение, это забота вышестоящего кода знать что с ним делать. Не надо возвращать никаких значений из сеттеров. Это же просто глупо
     def set_type_of_ticket(self,tt):
        return self.type_of_ticket
у вас tt - аргумент функции, какой смысл его тут же возвращать из функции? По-вашему, тот кто функцию вызывает, не знает какие аргументы он в неё передал?

3.
Магические числа во множестве
 if self.hours_of_order_ticket>=9 and self.hours_of_order_ticket <=17
Что такое 17, что такое 9 - хрен его знает

4.
 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):
когда у вас есть воооооооот такая длинная сигнатура, это ярко свидетельствует о том, что ваш класс не соблюдает принцип единичной ответственности. В питоне есть встроенный класс datetime, почему вместо всей вот этой череды годов, минут, секунд вы не хотите передать в __init__ один объект даты?

5.
Еще одно традиционное нарушение SR
         if self.hours_of_order_ticket>=18:
            print("Билет заказан вечером")

а если у вас ТЗ изметится и надо будет логгировать в файл? Ваш метод занимается сзару двумя вещами - формирует некую строку, и выдает эту строку на печать. Это плохо. Просто верните строку из функции, а что с ней делать - печатать в консоль, сохранять в файл или отдавать по сети - не задача этого кода, это задача того, кто этот код использует.

6.
 type(yot)!=type(int()) and type(yot)!=type(float()):

Используйте isinstance
да и в принципе, зачем эта проверка нужна? То есть предполагается такой сценарий: некий программист Вася решил использовать ваш код, и пульнул в функцию set_number_of_phone(self, nu) не float и не int, а например tuple. А следующей строкой своего кода Вася должен проверить, а не вернула ли функция -1, а то вдруг я туда передал tuple? Вася сказочный идиот, он сам не знает что передает в функцию?

7.
def __del__(self):
print(“Выполняется деструктор”)

Это не деструктор в смысле деструкторов С++. Если вы ожидаете, что этот метод будет вызван по выходу объекта из области видимости, вы очень ошибаетесь. Кстати, __init__ это вовсе не конструктор.

8.
def id_up(self):
“”“ДАнный метод выдает каждому билету рандомный ID в целях безопасности”“”
id=random.randint(0,1000000000)
print(“ID:”,id)

так себе безопасность, конечно. Вы же наверняка не первый, кто задумался над проблемой уникального идентифицирования объектов. Погуглите что ли.
Rodegast
 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 
Эти атрибуты должны принадлежать объекту, а не классу. Цена билета должна вычисляться, т.е. в место атрибута должен быть метод.

 class Bank_operation(Railway_ticket):
    """Данный клас позволяет работать с банковскими картами"""
    number_of_card=-1
    cvv2=-1
    month_end=-1
    year_end=-1
Тебя действительно не смущает тот факт что класс для банковских карт наследуется от класса билетов на поезд?

Дальше не смотрел.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB