Нужно чтобы бот правильно отвечал пользователю который вводит число. Я создал список из таких чисел, но бот все равно не отвечает
Я поместил в список числа, при вводе которых пользователем, бот понимал, что ответить. Но по какой то причине ничего не получается. Бот ничего не отвечает
P.s Я новичок в python
#main.py
@bot.message_handler(content_types=['text'])
def response(message):
try:
filename = 'UserName.json'
rub = message.text
if rub == config.scr():
with open(filename, 'w', encoding='utf-8') as f:
json.dump(rub, f, ensure_ascii=False)
bot.send_message(message.chat.id, 'Вы переводите ' + rub + ' рублей')
else:
bot.send_message(message.chat.id, 'Введите корректную сумму!')
except FileNotFoundError:
print('error')
#config.py
def scr():
n = 100001
ls = []
for i in range(n):
ls.append(i)
for elem in ls[:1000]:
ls.remove(elem)
array = [str(i) for i in ls]
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
В
config.py/scrу вас не возвращается список.Вместо
array = [str(i) for i in ls]напишитеreturn [str(i) for i in ls]В
config.py/responseнеправильная проверка наличия числа в списке. У вас проверяется, что введенное значение (строка) равна список.Нужно использовать оператор
in:if rub in config.scr():Мне кажется проверка диапазона суммы выглядит излишней. Предлагаю математически сравнивать.
- Тут получаемую сумму пытаемся перевести к целому числу через
int, если строка не является целым числом, то выбросится исключение ValueError - После проверяем что число входит в диапазон от 1 до 1000 (подправьте, если нужен другой диапазон)
Пример:
@bot.message_handler(content_types=['text']) def response(message): try: rub = int(message.text) if rub <= 0 or rub > 1000: raise ValueError() filename = 'UserName.json' with open(filename, 'w', encoding='utf-8') as f: json.dump(rub, f, ensure_ascii=False) bot.send_message(message.chat.id, f'Вы переводите {rub} рублей') except ValueError: bot.send_message(message.chat.id, 'Введите корректную сумму!') except FileNotFoundError: print('error')- Тут получаемую сумму пытаемся перевести к целому числу через