Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755

ООП фирмы

22.08.2020, 21:40. Показов 2578. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не пойму, что надо поправить?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Firma():
    def __init__(self, direktor, rabotnik, zakazchik, 
    predstavitel_zakazchika):
        self.direktor = direktor
        self.rabotnik = rabotnik
        self.zakazchik = zakazchik
        self.predstavitel_zakazchika = predstavitel_zakazchika
#        self.denga = denga
 
    def zakaz_i_vistavlenie_cheta(self, denga):
        print("Директор, " + self.direktor + ", \n" "получает оплату от заказчика, \nкоторую зовут " + self.zakazchik + ", \nв сумме " + str(self.denga) + " долларов.")
 
professional_LTD = Firma(
direktor = "Генадий Александрович", 
rabotnik = "Василий", 
zakazchik = "Мария Петровна", 
predstavitel_zakazchika = "Дмитрий")
 
professional_LTD.zakaz_i_vistavlenie_cheta(1000)
Миниатюры
ООП фирмы  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2020, 21:40
Ответы с готовыми решениями:

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

Помочь директору фирмы развезти сотрудников фирмы по домам на такси
После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти сотрудников по домам. Он заказал N машин - ровно столько,...

Создайте класс Vendor, который имеет следующие поля — наименование фирмы, адрес фирмы, телефон
2. Создайте класс Vendor, который имеет следующие поля - наименование фирмы, адрес фирмы, телефон. Создайте функцию конструктор, которая...

39
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.08.2020, 09:58  [ТС]
Студворк — интернет-сервис помощи студентам
denga изначально была закомментирована сверху. То есть предполагалось, что в классе она не фигурирует и значения по умолчанию у неё нету. А туда её почему - то пришлось добавить (не мной), потому что код не работал. denga - это сумма по договору к оплате, denga2 - внесенные деньги после выполнения работы.
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Что-то ты сам себя запутал.
А почему Вы убрали код методов заказа и выполнения работы?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.08.2020, 10:29
Так верни

Добавлено через 19 секунд
Чтобы не захламлять неизменённым кодом
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.08.2020, 11:00  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
professional_LTD.polychenie_zakaza_i_opl ata(850)
professional_LTD.polychenie_zakaza_i_opl ata(1100)
Это не то, что нужно (не надо вызывать два раза один метод). Под получением заказа имеется в виду приемка выполненной работы представителем заказчика.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.08.2020, 12:02
Так не вызывай, что ты так буквально воспринимаешь каждую строчку кода
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.08.2020, 13:08  [ТС]
Потому что рабочего примера без конечного автомата здесь нету. А как сделать нормально, пока не изучил.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.08.2020, 13:14
Цитата Сообщение от supmener Посмотреть сообщение
А как сделать нормально
Напиши весь юзкейс по пунктам, максимально подробно!
Максимально - это значит все возможные варианты действий и их последствия.
На этой основе уже будет элементарно спроектировать класс(ы).

Я б тебе посоветовал книгу, но ты все равно читать не будешь.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.08.2020, 13:25  [ТС]
Если не пойму по тем источникам, которые последовательно изучаю, то буду смотреть другие материалы. Так что возможно и книгу буду читать, если посоветуете.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.08.2020, 13:38
Книга не привязана к языку. На сколько помню, там примеры на джаве, но это не имеет значения. Главное понять принципы.
Кликните здесь для просмотра всего текста
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.08.2020, 06:16  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Напиши весь юзкейс по пунктам, максимально подробно!
Максимально - это значит все возможные варианты действий и их последствия.
На этой основе уже будет элементарно спроектировать класс(ы).
Сократил код. Может так будет понятнее.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Firma:
 
 
    def zakaz_i_vistavlenie_cheta(self, denga):
        print(
            "Договор на " + str(denga) + " долларов.")
 
    def polychenie_zakaza_i_oplata(self, denga2):
        if self.denga2 < self.denga:
            print("Не хватает {}".format(self.denga - self.denga2) + " долларов. Забрать товар нельзя")
        else:
            print("Оплачено " + str(denga2) + " долларов. Товар можно забрать")
            
professional_LTD = Firma()
 
professional_LTD.zakaz_i_vistavlenie_cheta(1000)
 
professional_LTD.polychenie_zakaza_i_oplata(850)
Code
1
2
3
4
5
6
7
Договор на 1000 долларов.
Traceback (most recent call last):
  File "firma4.py", line 18, in <module>
    professional_LTD.polychenie_zakaza_i_oplata(850)
  File "firma4.py", line 9, in polychenie_zakaza_i_oplata
    if self.denga2 < self.denga:
AttributeError: 'Firma' object has no attribute 'denga2'
Добавлено через 7 минут
Ещё так пробовал.
Python
1
2
3
        if denga2 < self.denga:
            z = self.denga - self.denga2
            print("Не хватает" + str(z) + " долларов. Забрать товар нельзя")
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
24.08.2020, 08:27
Цитата Сообщение от supmener Посмотреть сообщение
Сократил код. Может так будет понятнее.
Это именно тебе по прежнему непонятно. И юзкейс нужен в первую очередь для тебя.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Firma:
 
    def __init__(self):
        self.denga = 0
 
    def zakaz_i_vistavlenie_cheta(self, denga):
        self.denga = denga
        print(
            "Договор на " + str(denga) + " долларов.")
 
    def polychenie_zakaza_i_oplata(self, denga2):
        if denga2 < self.denga:
            print("Не хватает {}".format(self.denga - denga2) + " долларов. Забрать товар нельзя")
        else:
            print("Оплачено " + str(denga2) + " долларов. Товар можно забрать")
 
 
professional_LTD = Firma()
 
professional_LTD.zakaz_i_vistavlenie_cheta(1000)
 
professional_LTD.polychenie_zakaza_i_oplata(850)
Пойми, что когда ты создаешь экземпляр своего класса, то что в классе написано self - указывает на именно этот конкретный экземпляр!
Цитата Сообщение от supmener Посмотреть сообщение
if self.denga2 < self.denga:
Где у твоего professional_LTD такие атрибуты? Правильно, нигде.
Аргумент, который прилетает в метод извне - к экземпляру класса никакого отношения не имеет.
1
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
24.08.2020, 09:13
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Firma(object):
    def __init__(self, direktor, rabotnik, zakazchik,
                 predstavitel_zakazchika,denga):
        self.direktor = direktor
        self.rabotnik = rabotnik
        self.zakazchik = zakazchik
        self.predstavitel_zakazchika = predstavitel_zakazchika
        self.denga = denga
 
    def zakaz_i_vistavlenie_cheta(self, denga):
        print(
            "Директор, " + self.direktor + ", \n" "получает оплату от заказчика, \nкоторую зовут " + self.zakazchik + ", \nв сумме " + str(
                self.denga) + " долларов.")
 
 
professional_LTD = Firma(
    direktor="Генадий Александрович",
    rabotnik="Василий",
    zakazchik="Мария Петровна",
    predstavitel_zakazchika="Дмитрий",
    denga=1000
)
 
professional_LTD.zakaz_i_vistavlenie_cheta(1000)
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.08.2020, 09:51
Dax, переменная denga в методе не используется
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
24.08.2020, 09:56
Рыжий Лис, спасибо, увидел).
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.08.2020, 11:08  [ТС]
Работающий код до внедрения на фирме конечного автомата такой.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Firma:
    def __init__(self, direktor, rabotnik, zakazchik,
                 predstavitel_zakazchika):
        self.direktor = direktor
        self.rabotnik = rabotnik
        self.zakazchik = zakazchik
        self.predstavitel_zakazchika = predstavitel_zakazchika
 
    def zakaz_i_vistavlenie_cheta(self, denga):
        self.denga = denga
        print(
            "Директор, " + self.direktor + ", \n" "получает договор на работу от заказчика, \nкоторую зовут " + self.zakazchik +
            ", \nв сумме " + str(denga) + " долларов.") 
 
    def viponnenie_raboti(self):
        rabota = 'Работник ' + self.rabotnik + ' выполняет заказ.'
        return rabota
 
    def polychenie_zakaza_i_oplata(self, denga2):
        if denga2 < self.denga:
            print("Не хватает {}".format(self.denga - denga2) + " долларов. Забрать товар нельзя")
        else:
            print('Представитель заказчика, ' + self.predstavitel_zakazchika + ", \nоплачивает " + str(
            denga2) + " долларов и забирает товар.")
 
professional_LTD = Firma(
    direktor="Генадий Александрович",
    rabotnik="Василий",
    zakazchik="Мария Петровна",
    predstavitel_zakazchika="Дмитрий"
)
 
professional_LTD.zakaz_i_vistavlenie_cheta(1000)
print(professional_LTD.viponnenie_raboti())
professional_LTD.polychenie_zakaza_i_oplata(850)
Добавлено через 27 минут
Также будет работать с таким фрагментом.
Python
1
2
3
4
5
6
7
   def polychenie_zakaza_i_oplata(self, denga2):
        self.denga2 = denga2
        if self.denga2 < self.denga:
            print("Не хватает {}".format(self.denga - self.denga2) + " долларов. Забрать товар нельзя")
        else:
            print('Представитель заказчика, ' + self.predstavitel_zakazchika + ", \nоплачивает " + str(
            self.denga2) + " долларов и забирает товар.")
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
27.08.2020, 18:03
Цитата Сообщение от supmener Посмотреть сообщение
def polychenie_zakaza_i_oplata(self, denga2):
Зачем использовать имя denga2? Если убрать двойку - ничего в первом примере не изменится.

Но поскольку по смыслу denga2 и self.denga это все-таки разные переменные, нужно просто дать им адекватные имена:
invoice - счет для оплаты
payment (или charge) - оплата счета
2
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
27.08.2020, 21:31
supmener, Не хочу вникать в эту задачу, но так для информации скажу. Хотя не исключено, что все здесь в курсе , но может пригодиться для понимания кого-то из новичков со стороны, кто будет читать этот топик.
Подобные этой задачи в ООП называются "композицией" (в отличие от задач с наследованием). У Лутца подобная задача рассматривается в Лутц М. Изучаем Python (том 2, 5-е издание, 2019) стр. 174-176 "Объектно-ориентированное программирование и композиция: отношения "имеет". Где в качестве примера рассматривается пицерия, в которой принимают заказы от клиентов и обслуживают их".
Извините, что влез.

Добавлено через 8 минут
Но там не только Фирма является классом, а классами оформляются все участвующие субъекты.

Добавлено через 8 минут
supmener, У меня сохранился код от этого примера в 4-ом издании книги.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from employees import PizzaRobot, Server
 
class Customer:
    def __init__(self, name):
        self.name = name
    def order(self, server):
        print(self.name, "orders from", server)
    def pay(self, server):
        print(self.name, "pays for item to", server)
 
class Oven:
    def bake(self):
        print("oven bakes")
 
class PizzaShop:
    def __init__(self):
        self.server = Server('Pat')
        self.chef   = PizzaRobot('Bob')
        self.oven   = Oven()
 
    def order(self, name):
        customer = Customer(name)
        customer.order(self.server)
        self.chef.work()
        self.oven.bake()
        customer.pay(self.server)
 
if __name__ == "__main__":
    scene = PizzaShop()
    scene.order('Homer')
    print('...')
    scene.order('Shaggy')
Добавлено через 3 минуты
А вот код модуля, который импортируется.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Employee:
    def __init__(self, name, salary=0):
        self.name = name
        self.salary = salary
    def giveRaise(self, percent):
        self.salary = self.salary + (self.salary * percent)
    def work(self):
        print(self.name, "does stuff")
    def __repr__(self):
        return "<Employee: name=%s, salary=%s>" % (self.name, self.salary)
 
class Chef(Employee):
    def __init__(self, name):
        Employee.__init__(self, name, 50000)
    def work(self):
        print(self.name, "makes food")
 
class Server(Employee):
    def __init__(self, name):
        Employee.__init__(self, name, 40000)
    def work(self):
        print(self.name, "interfaces with customer")
 
class PizzaRobot(Chef):
    def __init__(self, name):
        Chef.__init__(self, name)
    def work(self):
        print(self.name, "makes pizza")
 
if __name__ == "__main__":
    bob = PizzaRobot('bob')
    print(bob)
    bob.work()
    bob.giveRaise(0.20)
    print(bob); print()
 
    for klass in Employee, Chef, Server, PizzaRobot:
        obj = klass(klass.__name__)
        obj.work()
Добавлено через 17 минут
Народ помогите советом. Только сейчас обнаружил. У меня после установки 3.8.5 перестали в Microsoft Visual Studio Community 2017 перестал запускаться отладчик программ написанных до установки 3.8.5. Ругается , Отладка не поддерживается для Python 2.5 и более ранней версии. Хотя из консоли программы запускаются и нормально работают. Получается все дело в IDE Microsoft Visual Studio, хотя там показывает, что студия работает с питоном 3.8.5.
Кто нибудь может подсказать, в чем дело?

Добавлено через 1 минуту
Может попробовать переустановить Microsoft Visual Studio ?
1
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
27.08.2020, 22:02
Цитата Сообщение от Viktorrus Посмотреть сообщение
Кто нибудь может подсказать, в чем дело?
На стековефлоу на похожие вопросы один ответ: Visual Studio 2017 просто не поддерживает python 3.8. (И, возможно, даже 3.7)
Только MS VS 2019.
Пишут, что microsoft пока не до этого.
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
28.08.2020, 01:11

Не по теме:

Приехали. Оказывается Microsoft Visual Studio Community 2017 не поддерживает Python 3.8. Попробую перейти на Microsoft Visual Studio Community 2019. Если не поможет, тогда поставлю PyCarm. :)



Добавлено через 3 часа 8 минут

Не по теме:

Установил Microsoft Visual Studio Community 2019. Работает, но пишет, что пока официально не поддерживает версию питона 3.8. Поэтому некоторые новые функции могут работать не правильно. В общем попробую, а там видно будет. :)

0
16 / 14 / 4
Регистрация: 05.06.2019
Сообщений: 79
28.08.2020, 13:59
Чего сложного то?
Если я правильно понял (а это сложно, автор формулирует мысли крайне запутано), то нужно передать в Firma эту таинственную переменную denga. И если она не соответствует стоимости работы (делаю выводы из результата работы кода), то выполнить:
Python
1
print("Не хватает {}".format(self.denga - denga) + " долларов. Забрать товар нельзя")
Просто добавить переменную стоимости работы и не будет никаких проблем.

Добавлено через 11 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Firma:
    def __init__(self, direktor, rabotnik, zakazchik,
                 predstavitel_zakazchika, denga, price):
        self.direktor = direktor
        self.rabotnik = rabotnik
        self.zakazchik = zakazchik
        self.predstavitel_zakazchika = predstavitel_zakazchika
        self.denga = denga
        self.price = price
 
    def zakaz_i_vistavlenie_cheta(self):
        print(
            "Директор, " + self.direktor + ", \n" "получает оплату от заказчика, \nкоторую зовут " + self.zakazchik +
            ", \nв сумме ", self.denga, " долларов.")
        print('')
 
    def viponnenie_raboti(self):
        rabota = 'Работник ' + self.rabotnik + ' выполняет работу.'
        return rabota
 
 
    def polychenie_zakaza_i_oplata(self):
        if self.denga < self.price:
            print("Не хватает {}".format(self.price - self.denga) + " долларов. Забрать товар нельзя")
            print('')
            print('Представитель заказчика, ' + self.predstavitel_zakazchika + ", \nоплачивает ",
                  self.price - self.denga, " долларов и забирает товар.")
        elif self.denga == self.price:
            print('')
            print('Представитель заказчика', self.predstavitel_zakazchika, '\nзабирает свой товар')
 
 
professional_LTD = Firma(
    direktor="Генадий Александрович",
    rabotnik="Василий",
    zakazchik="Мария Петровна",
    predstavitel_zakazchika="Дмитрий",
    price=int(input('Цена работ: ')),
    denga=int(input('Получено средств: ')),
 
)
 
professional_LTD.zakaz_i_vistavlenie_cheta()
 
print(professional_LTD.viponnenie_raboti())
 
professional_LTD.polychenie_zakaza_i_oplata()
Добавил print('') для читаемости вывода.
Логика понятна и проста. Что еще сделать нужно?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
28.08.2020, 14:14
Цитата Сообщение от user1472382 Посмотреть сообщение
Что еще сделать нужно?
Блокировку от повторного вызова метода.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2020, 14:14

6 клиентов случайным образом обращаются в 4 фирмы. Найти вероятность того , что хотя бы в одну фирмы не кто не
6 клиентов случайным образом обращаются в 4 фирмы. Найти вероятность того , что хотя бы в одну фирмы не кто не обратится.

“Работники и фирмы". Есть N фирм и M работников. Работники хотят устроиться на работу в одну из фирм, а фирмы хотят наня
I “Работники и фирмы&quot;. Есть N фирм и M работников. Работники хотят устроиться на работу в одну из фирм, а фирмы хотят нанять работников....

Где лучше учить ООП PHP ? И зачем нужен ООП
Здравствуйте ! До того как начел учить ООП я кайфовал от программирования, после того как начел учить ООП нет мотивации ну и т.д общем...

ООП. Переделать фрагмент программы под ООП
Есть небольшой фрагмент из программы, который необходимо перестроить под ООП(создать класс), для удобного испольщования. Можно ли изменить...

ООП ради ООП
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru