Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как решить задачу 'оно живое' в Python?

  1. Как решить задачу 'оно живое' в Python?

    Привет коллеги! Столкнулся с интересной задачей под названием "оно живое" и пытаюсь решить её на Python. Вообщем, надо как-то отслеживать состояние объекта во времени и реагировать на изменения. У кого есть идеи как это можно реализовать, может код какой-нибудь примерный скинете? Заранее спасибо! ?



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет! Вот пример кода, который может помочь. Здесь используется паттерн наблюдатель:

    Программный код:
    import time

    class Subject:
        
    def __init__(self):
            
    self._observers = []
            
    self._state None

        def attach
    (selfobserver):
            
    self._observers.append(observer)
        
        
    def detach(selfobserver):
            
    self._observers.remove(observer)

        
    def _notify(self):
            for 
    observer in self._observers:
                
    observer.update(self._state)

        
    def change_state(selfstate):
            
    self._state state
            self
    ._notify()

    class 
    Observer:
        
    def update(selfstate):
            print(
    f"State changed to: {state}")

    if 
    __name__ == "__main__":
        
    subject Subject()
        
    observer Observer()
        
    subject.attach(observer)

        for 
    state in ["alive""not alive""alive"]:
            
    subject.change_state(state)
            
    time.sleep(1
    Таким образом можна track состояние объекта и уведомлять подписчиков об изменениях. Может немного не то что нужно, но попробуй. Возможно корректировки под твои задачи помогут.

  4. Цитата Сообщение от DragonHeart
    Привет! Вот пример кода, который может помочь. Здесь используется паттерн наблюдатель:

    Программный код:
    import time

    class Subject:
        
    def __init__(self):
            
    self._observers = []
            
    self._state None

        def attach
    (selfobserver):
            
    self._observers.append(observer)
        
        
    def detach(selfobserver):
            
    self._observers.remove(observer)

        
    def _notify(self):
            for 
    observer in self._observers:
                
    observer.update(self._state)

        
    def change_state(selfstate):
            
    self._state state
            self
    ._notify()

    class 
    Observer:
        
    def update(selfstate):
            print(
    f"State changed to: {state}")

    if 
    __name__ == "__main__":
        
    subject Subject()
        
    observer Observer()
        
    subject.attach(observer)

        for 
    state in ["alive""not alive""alive"]:
            
    subject.change_state(state)
            
    time.sleep(1
    Таким образом можна track состояние объекта и уведомлять подписчиков об изменениях. Может немного не то что нужно, но попробуй. Возможно корректировки под твои задачи помогут.
    О, норм штука, паттерн наблюдателя часто выручает. Правда я бы в твоем коде еще метод detach (например для динамической работы с обсерами).

  5. Чувак, если речь идет об объектах, которые меняют состояние во времени, можно юзать threading и observer pattern. Вот простой пример:

    Программный код:
    import threading
    import time

    class Entity:
        
    def __init__(self):
            
    self.alive False

        def live
    (self):
            while 
    self.alive:
                print(
    "I'm alive!")
                
    time.sleep(1)

        
    def start(self):
            
    self.alive True
            threading
    .Thread(target=self.live).start()

        
    def stop(self):
            
    self.alive False

    Entity()
    e.start()
    time.sleep(5)
    e.stop() 
    Здесь класс Entity отображает "живое" состояние.

  6. Цитата Сообщение от Анастасия Александровна
    Чувак, если речь идет об объектах, которые меняют состояние во времени, можно юзать threading и observer pattern. Вот простой пример:

    Программный код:
    import threading
    import time

    class Entity:
        
    def __init__(self):
            
    self.alive False

        def live
    (self):
            while 
    self.alive:
                print(
    "I'm alive!")
                
    time.sleep(1)

        
    def start(self):
            
    self.alive True
            threading
    .Thread(target=self.live).start()

        
    def stop(self):
            
    self.alive False

    Entity()
    e.start()
    time.sleep(5)
    e.stop() 
    Здесь класс Entity отображает "живое" состояние.
    Прикольно! Только учти, что многопоточность в Python может быть tricky из-за GIL, так что оптимизируй производительность, если понадобится.

  7. Попробуй с асинхронностью на asyncio. В Python это хорошо работаеет для подобных задач:

    Программный код:
    import asyncio

    async def live
    (entity):
        while 
    entity['alive']:
            print(
    'It is alive!')
            
    await asyncio.sleep(1)

    async def main():
        
    entity = {'alive'True}
        
    asyncio.create_task(live(entity))
        
    await asyncio.sleep(5)
        
    entity['alive'] = False

    asyncio
    .run(main()) 
    Здесь фишка в асинхронности, и за счет этого мы можем управлять состоянием объекта.

  8. Цитата Сообщение от Фродо
    Попробуй с асинхронностью на asyncio. В Python это хорошо работаеет для подобных задач:

    Программный код:
    import asyncio

    async def live
    (entity):
        while 
    entity['alive']:
            print(
    'It is alive!')
            
    await asyncio.sleep(1)

    async def main():
        
    entity = {'alive'True}
        
    asyncio.create_task(live(entity))
        
    await asyncio.sleep(5)
        
    entity['alive'] = False

    asyncio
    .run(main()) 
    Здесь фишка в асинхронности, и за счет этого мы можем управлять состоянием объекта.
    Это кстати топ подход! Asyncio действительно решает множество проблем с параллельностью и асинхронностью в Python.

  9. А может быть тебе просто нужно что-то без конкректных паттернов, типа отслеживания состояния переменной? Вот простое решение:

    Программный код:
    state "not alive"

    def check_state():
        global 
    state
        
    if state == "alive":
            print(
    "Object is alive")
        else:
            print(
    "Object is not alive")

    state "alive"
    check_state()
    state "not alive"
    check_state() 
    of course, это basic, но иногда simple solutions are the best solutions.

  10. Цитата Сообщение от Лара Крофт
    А может быть тебе просто нужно что-то без конкректных паттернов, типа отслеживания состояния переменной? Вот простое решение:

    Программный код:
    state "not alive"

    def check_state():
        global 
    state
        
    if state == "alive":
            print(
    "Object is alive")
        else:
            print(
    "Object is not alive")

    state "alive"
    check_state()
    state "not alive"
    check_state() 
    of course, это basic, но иногда simple solutions are the best solutions.
    Лаконично! Думаю, для опр-ых случаев такое решение вполне годное.

Страница 1 из 2 12 ПоследняяПоследняя