Калькулятор Python TG BOT
Подскажите пожалуйста, как зациклить проверку введенных значений до ввода верного диапазона значений? Спасибо.
import telebot
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=['start'])
def handle_text(message):
numvan = bot.send_message(message.chat.id, 'Введите оклад по званию:⭐')
bot.register_next_step_handler(numvan ,num1_fun)
def num1_fun(message):
if int(message.text.isdigit()):
if int(message.text) in range(7000, 35000):
bot.send_message(message.chat.id, 'Пойдет ✅ {}'.format(message.text))
else:
bot.send_message(message.chat.id, 'Укажите верный оклад ?')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом ?')
bot.polling(none_stop=range)
global num1;
num1 = message.text
numtwo = bot.send_message(message.chat.id, 'Введите оклад по должности:?')
bot.register_next_step_handler(numtwo ,num2_fun)
def num2_fun(message):
if int(message.text.isdigit()):
if int(message.text) in range(15000, 45000):
bot.send_message(message.chat.id, 'Пойдет ✅ {}'.format(message.text))
else:
bot.send_message(message.chat.id, 'Укажите верный оклад ?')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом ?')
bot.polling(none_stop=True)
Ответы (1 шт):
Как зациклить проверку введенных значений?
Если условия возвращают False то register_next_step_handler на эту же функцию?♀️
import telebot
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=['start'])
def handle_text(message):
bot.send_message(message.chat.id, 'Введите оклад по званию:⭐')
bot.register_next_step_handler(message, num1_fun)
def num1_fun(message):
if message.text.isdigit():
salary = int(message.text)
if 7000 <= salary <= 35000:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
bot.send_message(message.chat.id, 'Введите оклад по должности:?')
bot.register_next_step_handler(message, num2_fun)
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад (от 7000 до 35000) ?')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом ?')
bot.register_next_step_handler(message, num1_fun)
def num2_fun(message):
if message.text.isdigit():
salary = int(message.text)
if 15000 <= salary <= 45000:
bot.send_message(message.chat.id, f'Пойдет ✅ {salary}')
return
else:
bot.send_message(message.chat.id, 'Укажите верный оклад (от 15000 до 45000) ?')
else:
bot.send_message(message.chat.id, 'Оклад должен быть числом ?')
bot.register_next_step_handler(message, num2_fun)
bot.polling(none_stop=True)
.format(message.text)
-> лучше заменить на f-строки ->f'Пойдет ✅ {salary}'
int(message.text.isdigit())
-> преобразовывать в int тут не нужно ->if message.text.isdigit():
- этого будет достаточно. (.isdigit() - возвращает True\False)Генерировать все допустимые числа
range(7000, 35000)
- не целесообразно, ведь есть знаки равенства:15000
<=salary
<=45000
Не обязательно сохранят ответ бота
numtwo = bot.send_message(..)
что бы передать его вbot.register_next_step_handler(message, num2_fun)
, можно просто в качестве параметра указать ранее принятое message.bot.polling(none_stop=True)
не нужно засовывать в каждую из функций, метод должен быть вызван один раз в самом конце вашего кода. Это основной цикл программы и он должен быть только один.