Python PyTelegramBotAPI. Проверка isdigit в строке
# Start
@bot.message_handler(commands=['start'])
def welcome(message):
bot.send_message(message.chat.id,
"Добро пожаловать, {0.first_name}!\n"
"Я - <b>{1.first_name}</b>, бот созданный чтобы помочь рассчитать дневную норму калорий.".format(
message.from_user, bot.get_me()),
parse_mode='html')
bot.send_message(message.chat.id, 'Введите ваш вес')
bot.register_next_step_handler(message, get_weight)
Проблема в цикле в функции get_weight, когда ввожу буквы вместо цифр, срабатывает else и начинает флудить bot.send_message(message.chat.id, 'Вводите только цифры!').
Подскажите пожалуйста, заранее спасибо)
# Получаем вес, после идем на функцию с ростом
def get_weight(message):
global weight
while True:
weight = message.text
if weight.isdigit():
bot.send_message(message.from_user.id, 'Введите свой рост')
bot.register_next_step_handler(message, get_height)
break
else:
bot.send_message(message.chat.id, 'Вводите только цифры!')
Ответы (1 шт):
Автор решения: D. Violet
→ Ссылка
зачем вообще тут while?
@bot.message_handler(commands=['start'])
def welcome(message, where_call=None):
if where_call is None:
bot.send_message(message.chat.id,
"Добро пожаловать, {0}!\n"
"Я - <b>{1}</b>, бот созданный чтобы помочь рассчитать дневную норму калорий.".format(
message.from_user.first_name, bot.get_me().first_name),
parse_mode='html')
bot.send_message(message.chat.id, 'Введите ваш вес')
bot.register_next_step_handler(message, get_weight)
elif where_call == 'get_weight':
bot.send_message(message.chat.id, 'Вводите только цифры!\nВведите ваш вес')
bot.register_next_step_handler(message, get_weight)
def get_weight(message):
global weight
if message.text.isdigit():
bot.send_message(message.from_user.id, 'Введите свой рост')
bot.register_next_step_handler(message, get_height)
else:
welcome(message, 'get_weight')
добавленный аргумент where_callв welcome() позволит возвращаться к этой функции и повторять нужный шаг.
