Как ввести 2 числа, разделённые запятыми, в переменные
Я создаю код, чтобы пользователь мог сам выбрать диапазон выбора случайных чисел. Я попытался создать переменные a, b в самой командной функции и разделить их с помощью split(','). Он по-прежнему выдает ошибку.
@bot.message_handler(commands=['setrange'])
def set_range(message):
# global random_num
# global a
# global b
#user_guess = message.text
send = bot.send_message(message.chat.id, 'Введите от какого числа до какого будет
генерироваться число в формате [от, до]:')
bot.register_next_step_handler(send, set_range_global)
def set_range_global(message):
#global random_num
#global a, b
user_guess = int(message.text)
a, b = map(float(int, user_guess.split(', ')))
bot.reply_to(message, a,b)
user_guess = message.text
arr = list(map(int, user_guess.split(',')))
if int(user_guess) != arr[0] and int(user_guess) != arr[1]:
default_a = a
default_b = b
bot.send_message(message.chat.id, f'Диапазон генерирования числа успешно
изменен!\nНовый диапазон: {a, b}')
default_a и default_b это переменные для значений по умолчанию для a и b при вводе команды /start
Ошибка:
"C:\Users\Danil\AppData\Local\Programs\Python\Python312\Lib\site-packages\telebot\util.py", line 90, in run
task(*args, **kwargs)
File "C:\Users\Danil\Desktop\Tg_game\main.py", line 66, in
set_range_global
a, b = map(float(int, user_guess.split(', ')))
^^^^^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'split'
Ответы (2 шт):
Автор решения: Иван Ипатов
→ Ссылка
@bot.message_handler(commands=['setrange'])
def set_range(message):
sent = bot.send_message(message.chat.id,
'Введите от какого числа до какого будет генерироваться число в формате [от, до]:')
bot.register_next_step_handler(sent, set_range_global)
def set_range_global(message):
user_guess = str(message.text)
try: # пробуем, если без ошибок
a, b = re.findall(r"\d+", user_guess)
# if int(user_guess) != arr[0] and int(user_guess) != arr[1]: не понял что вы тут проверяете
bot.send_message(message.chat.id, f'Диапазон генерирования числа успешно изменен!\nНовый диапазон: [{a}, {b}]')
rand_num = random.randint(int(a), int(b))
bot.send_message(message.chat.id, str(rand_num))
except ValueError: # если пользователь ввел не 2 числа
set_range(message)
Автор решения: Влад Гаврилюк
→ Ссылка
Первый ответ через try catch подходит, но там могут возникнуть и другие проблемы, которые не всегда говорят о том что пользователь ввел не два числа.
Думаю тут стоит внутри try использовать проверку на наличие запятой в строке:
if ',' in message.text:
# Выполняем парсинг
else
# Выводим ошибку, что ввели не два числа