
Python
Почему цикл не останавливается ?
Друзья, подскажите нубу, почему при попытке остановить цикл с помощью отправки сообщения СНЯТЬ С ОХРАНЫ, он продолжает идти? как можно выйти из ситуации? необходимо, чтобы цикл шел, до момента отправки команды о остановке. А сейчас цикл НЕВОЗМОЖНО остановить

А не проще ли вместе условия проверки текста сделать проверку по цифре 0 и 1?
Дмитрий Орловский
пробовал разными способами, проверку по переменным, которым присваивал значения в зависимости от теста - не работает
Активное ожидание это не очень хорошо. Подпишись на какое-нибудь событие и в другом участке кода вызывай это событие.
А у цикла нет причин завершаться, так как сообщение не поменяется. Скорее всего, будет новое сообщение и новый вызов функции.
А у цикла нет причин завершаться, так как сообщение не поменяется. Скорее всего, будет новое сообщение и новый вызов функции.
time.sleep работает синхронно, т.е. message.text однажды прилетев, больше не меняется, а тупо крутится в цикле. Надо выкинуть sleep...
from threading import Timer
def func(message):
if 'Поставить на охрану' in message.text:
print('moo')
if 'Снять с охраны' in message.text:
return
Timer(1.0, func).start()
# ...(1.0, func, ['аргументы', 'если', 'есть']).start()
Либо не так, я не знаю, как там изначально вызывается func и что у него в декораторе... Можно делать дополнительную функцию, которая через Timer раз в секунду вызывает саму себя, а уже внутри той функции вызывать func и проверять значение message...
Дмитрий Орловский
если из моего кода исключить полностью sleep, цикл все равно продолжает крутится при попытке остановить
Дмитрий Орловский
если в моем последнем примере перед while поставить print(x), то я увижу, что x меняется в зависимости от написанного сообщения, но внутри while x остается неизменным
Как я понял, ответа тут еще нет.
Каждое сообщение - вызывает эту функцию, в которой x - локальная переменная, существующая только в этой функции.
Создай снаружи функции x = 0
В функции добавь global x
Если сообщение поставить охрану - x=10
Если снять - x=0
В цикле надо заменить time.sleep() на что-то, что не будет останавливать работу всего кода. Выше пример с потоком был, наверное рабочий
Каждое сообщение - вызывает эту функцию, в которой x - локальная переменная, существующая только в этой функции.
Создай снаружи функции x = 0
В функции добавь global x
Если сообщение поставить охрану - x=10
Если снять - x=0
В цикле надо заменить time.sleep() на что-то, что не будет останавливать работу всего кода. Выше пример с потоком был, наверное рабочий
Первое - а зачем ты вообще используешь цикл в функции message?
bot.polling(none_stop=True) сам в цикле запрашивает обновления у телеграм
твой код должен выглядеть просто
bot.polling(none_stop=True) сам в цикле запрашивает обновления у телеграм
твой код должен выглядеть просто
# Получение сообщений от юзера
@bot.message_handler(content_types=["text"])
def handle_text(message):
if(message.text == "debil"):
print("sam gebil")
if (message.text == "durak"):
print("ot dyraka slyshy")
# Запускаем бота
bot.polling(none_stop=True)
Дмитрий Орловский
у бота планировалось 2 режима работы.. и не понятно как включать режимы написал либо одно либо другое сообщение
Дмитрий Орловский
вопрос не решен, так как в одном из режимов работы необходимо постоянно мониторить и выполнять действия c файлами, именно поэтому использовал while, if к сожалению недостаточно
Дмитрий Орловский
про два режима работы, необходимо чтобы бот при отправке ПОСТАВИТЬ НА ОХРАНУ переходил к циклической последовательности действий, а при отправке СНЯТЬ С ОХРАНЫ бот выходил из этой циклической последовательности действий и не переходил к ней до тех пор, пока не будет отправлено сообщение ПОСТАВИТЬ НА ОХРАНУ
Дмитрий Орловский
ничего страшного, буду рад услышать в любое удобное время) заранее спасибо
Похожие вопросы
- Помогите разобраться и объяснить принцип действия цикла поиска простых чисел в Pyrhon
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор
- Помогите решить (не могу в самом цикле разобраться )
- Как написать цикл на языке программирования Python
- Помогите решить информатику на языке ПИТОН!!!!!!!!!!!!!! с помощью циклов while и for
- Питон, циклы, функция range
- Что делает нижнее подчёркивание в цикле for. Нужно подробное объяснение.
- Помогите пожалуйста правильно организовать алгоритм цикла
- Метод исключения в цикле for?
- Сложение чисел из цикла с отображением не только суммы, но и процесса