С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 18

Python паттерн Состояния

16.11.2021, 20:37. Показов 1805. Ответов 9

Студворк — интернет-сервис помощи студентам
Используя поведенческий паттерн «Состояние», реализуйте процесс поступления абитуриента в ВУЗ по следующей схеме:
1) Состояние «Начало» – вывод «Приём в ВУЗ открыт», «Документы поданы», «Проходной балл для 1 волны: Значение1, для 2 волны: Значение 2». Переход к состоянию «Анализ 1 волна».
2) Состояние «Анализ 1 волна» – вывод «Результат вступительных испытаний: ЗначениеN», «Конкурс 1 волна». Если «ЗначениеN» больше «Значение1», то вывод «Попадание в 1 волну» и переход к состоянию «Обработка», в противном случае – переход к состоянию «Анализ 2 волна».
3) Состояние «Анализ 2 волна» – вывод «Конкурс 2 волна». Если «ЗначениеN» больше «Значение2», то вывод «Попадание во 2 волну» и переход к состоянию «Обработка», в противном случае – вывод «Конкурс не пройден» и переход к состоянию «Окончание».
4) Состояние «Обработка» – вывод «Приказ о зачислении». Переход к состоянию «Окончание».
5) Состояние «Окончание» – вывод «Приём в ВУЗ закрыт». Состояние None.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2021, 20:37
Ответы с готовыми решениями:

Python-скрипт для просмотра состояния сервисов на ArcGIS Online
Здравствуйте, нужно написать Python-скрипт для просмотра состояния сервисов на ArcGIS Online. Дайте пожалуйста литературу или ссылку на...

Как выполнить определённый python скрипт в зависимости от состояния checkbox в форме?
Добрый день, Ребята! Такой вопрос, подскажите есть html страница в которой форма, форму обрабатывает скрипт на python, хочу...

Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения?
Взято из Шевчук А., Охрименко Д., Касьянов А. Design Patterns via C#. Приемы объектно-ориентированного проектирования (2015): Почему...

9
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
16.11.2021, 21:26
Цитата Сообщение от Eugene228 Посмотреть сообщение
Используя поведенческий паттерн «Состояние»
И где ссылка на шаблон? Паттерном называется шаблон в виде кода, который может использоваться для решения задач различного типа. У Вас же просто описано, причем не очень четко, условие к конкретной задаче.
Что у Вас на входе? Что на Выходе? Где пример, который бы пояснял, что требуется?

Добавлено через 10 минут
Цитата Сообщение от Eugene228 Посмотреть сообщение
Состояние «Начало»
Состояние чего? Электронного табло? Которому соответствует список с текстами, которые высвечиваются при соответствующем сигнале на табло? Или что-то другое? Куда заносится информация, что документы поданы? К чему привязана эта информация? Куда заносится информация о значении проходного балла.
Напишите ТЗ, то есть четкую схему, какие действия должны производится с какими объектами, и какие свойства у этих объектов?

Добавлено через 3 минуты
Откуда берется проходной бал?

Добавлено через 12 минут
Eugene228, Если различные состояния рассматривать как временные части некоторого временного отрезка описывающего прием в ВУЗ. То один из вариантов решения, это создание композиции, состоящей из частей-состояний. Тогда каждое такое состояние нужно описывать в виде класса. И все эти классы-состояния будут атрибутами класса "Поступление в ВУЗ". В общем лично мне совершенно не понятно, что Вам нужно. Может кто-то более сообразительный разберется.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.11.2021, 23:34
Цитата Сообщение от Viktorrus Посмотреть сообщение
Паттерном называется шаблон в виде кода
Отнюдь
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
17.11.2021, 16:49
iSmokeJC, Шаблоны конечно в разных областях бывают разными. Но в программировании если шаблон в виде некого алгоритма, как здесь, то его нельзя проверить, что бы убедиться в его работоспособности. А если нет доказательства, что он работает, то и бессмысленно называть его шаблоном.
Но если Вам хочется использовать этот мутный алгоритм в качестве шаблона, то ради бога используйте.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.11.2021, 17:01
Viktorrus, что-то мне подсказывает, что вы не понимаете что такое паттерн проектирования.
Цитата Сообщение от Viktorrus Посмотреть сообщение
то его нельзя проверить
Его не нужно "проверять". Это не алгоритм.
Паттерны (или шаблоны) проектирования описывают
типичные способы решения часто встречающихся
проблем при проектировании программ.
Цитата Сообщение от Viktorrus Посмотреть сообщение
в виде некого алгоритма, как здесь
Опять же - здесь не совсем алгоритм, а описание состояний конечного автомата и условия смены этих состояний.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
17.11.2021, 18:14
iSmokeJC, По моему это Вы не понимаете, что такое шаблон. Основное свойство шаблона это возможность его многократного применения. Обозвать шаблоном можно все что угодно, но это не будет шаблоном если его нельзя использовать. Можно табуретку назвать шаблоном для лампочек. Но это не поможет Вам производить лампочки из табуретки.
То что какой то объект является шаблоном, не достаточно просто обозвать его шаблоном, а требуется доказательство, что это шаблон для производства некоторых изделий. Тем более когда шаблоном называется вообще не понятно что.
Если Вам понятен этот шаблон, то напишите код по этому шаблону, что бы доказать, что это шаблон. А не вести пустые разговоры. Я вместо болтовни лучше займусь делом и буду использовать шаблон, про который уже доказано, что это шаблон.

Добавлено через 21 минуту
Кстати ТСу в процессе обучения наверняка давали описание паттерна "Состояние" и пример использования этого паттерна.
А теперь ему дали задание , используя этот паттерн "Состояние", выполнить задание.
iSmokeJC, Вам нравится гадать, какой паттерн "Состояние" изучал (должен был изучить) ТС и используя его решить это задание? Дерзайте.
Хотя Вы конечно можете создать свой паттерн "Состояние" и решить задание используя его. Но не уверен, что такое решение будет принято у ТС. Хотя можете попробовать.

Добавлено через 9 минут
Если ТС выложит из своих лекций или списав у однокурсников описание
Цитата Сообщение от Eugene228 Посмотреть сообщение
поведенческий паттерн «Состояние»
тогда можно будет попробовать ему помоч в решении этой задачи и
Цитата Сообщение от Eugene228 Посмотреть сообщение
Используя поведенческий паттерн «Состояние», реализуйте процесс поступления абитуриента в ВУЗ
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
17.11.2021, 18:17

Цитата Сообщение от Viktorrus Посмотреть сообщение
гадать, какой паттерн "Состояние"...
Цитата Сообщение от Viktorrus Посмотреть сообщение
можете создать свой паттерн "Состояние"...
Что тут гадать? Паттерн "состояние" - один. И паттерн - это совокупность отношений элементов программы (классов, модулей, функций и пр.). И реализовать его можно несколькими способами. Это не прямая директива "этот класс наследуется от этого, содержит тот и является частью того". Если б вы это понимали, то не несли бы такую муть.
Зачастую пример реализации паттерна может быть абсолютно не применим к конкретно взятой задаче. Это принцип, а не руководство.

Цитата Сообщение от Viktorrus Посмотреть сообщение
Если ТС выложит из своих лекций или списав у однокурсников описание
Цитата Сообщение от Viktorrus Посмотреть сообщение
тогда можно будет попробовать ему помоч в решении этой задачи и
Читайте на здоровье.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.11.2021, 18:18
Viktorrus,
Вы ошибаетесь. :-)

Это все придумала (точнее, задокументировала известное) банда четырех.

https://ru.wikipedia.org/wiki/... ктирования)
Так, кстати, пример на Python - специально для ТС.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
17.11.2021, 19:16
iSmokeJC, Оказывается действительно существует такой общеизвестный шаблон "Состояние". Есть и примеры кодов по этому шаблону.
https://ru.wikipedia.org/wiki/... %B8%D1%8F)
Все, что я попросил у ТС, это дать подобную ссылку на шаблон.
Так что если Вы знаете этот шаблон или есть желание его изучить, то можете помочь ТСу. Я сейчас занят другим проектом. Так что дерзайте. Удачи.

Добавлено через 2 минуты
Garry Galler, Где Вы раньше были? Не было бы такой развернутой дискуссии у меня с iSmokeJC,
Каюсь, я поленился сразу проверить наличие такого паттерна в интернете. Виноват.

Добавлено через 21 минуту
Кстати пример в Википедии достаточно сложный. С использованием метакласса и абстрактного класса "Состояние" и его подклассов с конкретными состояниями. И с использованием методов делегирования.
iSmokeJC, Это как раз для Вас, помогите ТСу. У меня нет времени сейчас осваивать этот шаблон.
Кликните здесь для просмотра всего текста
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from abc import ABCMeta, abstractmethod
 
 
class State(metaclass=ABCMeta):
 
    @abstractmethod
    def eat(self) -> str:
        pass
 
    @abstractmethod
    def find_food(self) -> str:
        pass
 
    @abstractmethod
    def move(self) -> str:
        pass
 
    @abstractmethod
    def dream(self) -> str:
        pass
 
 
class SleepState(State):
 
    def eat(self) -> str:
        return 'не может есть, пока спит'
 
    def find_food(self) -> str:
        return 'ищет еду, но только в своих мечтах'
 
    def move(self) -> str:
        return 'не может двигаться, пока спит'
 
    def dream(self) -> str:
        return 'спит и видит чудный сон'
 
 
class OnGroundState(State):
 
    def eat(self) -> str:
        return 'вываливает на пузо добытых моллюсков и начинает неспешно их есть'
 
    def find_food(self) -> str:
        return 'находит дурно пахнущую, но вполне съедобную тушу выбросившегося на берег кита'
 
    def move(self) -> str:
        return 'неуклюже ползет вдоль береговой линии'
 
    def dream(self) -> str:
        return 'на мгновние останавливается, замечтавшись об одной знакомой самке'
 
 
class InWaterState(State):
 
    def eat(self) -> str:
        return 'не может есть в воде'
 
    def find_food(self) -> str:
        return 'вспахивает бивнями морское дно, вылавливая моллюсков своими вибриссами'
 
    def move(self) -> str:
        return 'грациозно рассекает волны мирового океана'
 
    def dream(self) -> str:
        return 'не спит и не мечтает в воде - это слишком сложно'
 
 
class Walrus:
 
    def __init__(self, state: State) -> None:
        self._state = state
 
    def change_state(self, state: State) -> None:
        self._state = state
 
    def eat(self) -> None:
        self._execute('eat')
 
    def find_food(self) -> None:
        self._execute('find_food')
 
    def move(self) -> None:
        self._execute('move')
 
    def dream(self) -> None:
        self._execute('dream')
 
    def _execute(self, operation: str) -> None:
        try:
            func = getattr(self._state, operation)
            print('Морж {}.'.format(func()))
        except AttributeError:
            print('Морж такого делать не умеет.')
 
 
if __name__ == '__main__':
    sleep = SleepState()
    on_ground = OnGroundState()
    in_water = InWaterState()
    walrus = Walrus(on_ground)
    print('OUTPUT:')
    walrus.change_state(in_water)
    walrus.move()
    walrus.find_food()
    walrus.change_state(on_ground)
    walrus.eat()
    walrus.move()
    walrus.dream()
    walrus.change_state(sleep)
    walrus.dream()
 
'''
OUTPUT:
Морж грациозно рассекает волны мирового океана.
Морж вспахивает бивнями морское дно, вылавливая моллюсков своими вибриссами.
Морж вываливает на пузо добытых моллюсков и начинает неспешно их есть.
Морж неуклюже ползет вдоль береговой линии.
Морж на мгновние останавливается, замечтавшись об одной знакомой самке.
Морж спит и видит чудный сон.
'''
https://ru.wikipedia.org/wiki/... %B8%D1%8F)

Добавлено через 12 минут
Кстати в примере из Википедии рассматривается состояние объекта "Морж".
В данной задаче у ТС не указано для какого объекта рассматривается состояние. Поэтому для меня это условие задачи мутное. А может я просто что то не понимаю.

Добавлено через 14 минут
Или здесь рассматривается состояние процесса проведения экзаменов? В общем для меня тупого, нужно разъяснение. Состояние чего?
А то мы имеем утверждение подобное утверждению "Круглое". А круглое что? Конечно из утверждения, что круглое, можно вытащить какую то информацию, но она не обязательно будет истинной. Например круглое может катиться. Но это не верно для рисунка шара. Рисунок шара не может катиться.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
18.11.2021, 12:33
Кстати о делегировании. Понял что видимо подразумевают под "магией" питона. Это видимо когда питон скрытно осуществляет некоторые действия, которые при чтении кода не очевидны. Про них просто нужно знать.
Так для объекта оболочки, класса Обертки, значением атрибута обернутый, является обернутый объект. И когда с помощью делегирования мы изменяем обернутый объект, то измененный обернутый объект скрытно присваивается атрибуту wrapped "обернутый" объекта оболочки x (x.wrapped).
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class wrapper:
    def __init__(self, object):
        self.wrapped = object
    def __getattr__(self, attrname):
        print('Trace:', attrname)
        return getattr(self.wrapped, attrname)
 
if __name__ == '__main__':
    x = wrapper([1,2,3])
    print(x.wrapped)
    x.append(4)
    print(x.wrapped)              # [1, 2, 3, 4]
 
    x = wrapper({"a": 1, "b": 2})
    x.keys()
    print(x.wrapped)              # {'a': 1, 'b': 2} Шаблон для метода keys словаря не работает.
                                  # так как возвращает не словарь, а объект представления. (у Лутца ошибка, так как его вариант только для v.2.X) 
    x.values()
    print(x.wrapped)              # {'a': 1, 'b': 2} Шаблон для метода keys словаря не работает.
                                  # так как возвращает не словарь, а объект представления.
 
    v = x.clear()
    print(x.wrapped)              # {}


Добавлено через 11 минут
Аналогично происходит с фабричными функциями, когда значения используемые из объемлющей функции сохраняются в объекте встроенной функции. Если не прочитать про такую особенность встроенных функций, то из кода сходу не догадаешься. "Магия" питона.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2021, 12:33
Помогаю со студенческими работами здесь

Смесь двух газов нагревается при постоянном давлении из состояния P,V1,T1 до состояния P,V2,T2
Добрый вечер, необходимо решить задачу, но я не понимаю как... Смесь двух газов нагревается при постоянном давлении из состояния...

QStateMachine: возможность создания недетерминированного КА с переходами из одного состояния в разные состояния
Можно с помощью qstatemachine сделать недетерминированный КА с переходами из одного состояния в разные состояния при одинаковом входном...

Графы: найти все состояния, которые являются достижимыми из заданного состояния
Помогите написать программу: Модель работы некоторой системы представлена ориентированным графом, где вершины – это состояния системы,...

Устранить недостижимые состояния и исключить эквивалентные состояния конечного автомата
Помогите, пожалуйста, с заданием: 1. Устранить недостижимые состояния конечного автомата. 2. Исключить эквивалентные состояния...

Создание нового state состояния в корневом компоненте зависящим от состояния другого элемента
Помогите, пожалуйста, разобраться с состояниями в классовом компоненте, пока что нуб в React, такой пример import React from...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru