Как сделать ограничение с помощью переменной в random.randint()
Недавно я писал бота "угадай число". Сейчас решил добавить кое-какую функцию, но столкнулся с проблемой. Я хочу сделать так, чтобы пользователь сам мог выбрать до какого числа бот будет загадывать свое число.
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
await bot.send_message(message.chet.id, 'Напишите число, от 1 до которого я загадаю число:')
a = int(message.text)
await Form.number.set()
global r
r = random.randint(1, a)
await bot.send_message(message.chat.id, 'Я загадал число от 1 до ' + str(a) + '. Теперь попробуйте отгадать его. Никаких подсказок! Для выхода /cancel или "выйти".')
Но при таком коде выдает ошибку invalid literal for int() with base 10
Ответы (1 шт):
Насколько я понял из вашего кода, пользователь отправляет команду start и вы в этой же функции проверяете что содержится в message.text, хотя там будет только команда start.
То есть в вашем коде происходит примерно следующее:
Если пользователь отправляет команду "start", то
отправить ему сообщение "Напишите число, от 1 до которого я загадаю число:"
Получить, что написал пользователь (будет "start") и преобразовать это в число
Так как нельзя преобразовать "start" в число, Python выдаёт ошибку. Также попробуйте вместо вашего кода, написать вот этот:
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
await bot.send_message(message.chat.id, 'Напишите число, от 1 до которого я загадаю число:')
print(message.text, type(message.text))
Если в результате у вас будет например:
1 int
то возможно проблема в другой части кода, а если там будет:
start str
то нужно читать сообщения, приходящие боту и если в предыдущем сообщением была команда start, то нужно записать это сообщение (самое последнее), и если будет ошибка, то нужно написать пользователю, чтобы он отправил число ещё раз. Если ошибки не будет, то сгенерировать случайное число и проверять все сообщения пользователя на это число, пока он не угадает