Александр Рыжих, и вообще это уже вопросы отдельного характера, под них можно отдельные темы создавать. Ибо вариантов решения этих вопросов много. Самый простой - регулярные выражения. Но лучше отдельную тему создавать
Александр Рыжих, ну так правильно. Условие вы какое поставили? Если это НЕ число и если строка НЕ содержит подстроку "+*-/". И вы должны понимать, что "+*-/" - это отдельная цельная строка, а не один из символов + * - /.
Сделайте отдельную функцию, которая принимает вашу строку на вход и проверяет ее на валидность.
Александр Рыжих, когда вы строку "1+2+3" преобразуете в список, получаете ['1', '+', '2', '+', '3'].
потом вы зачем-то сортируете этот список, потом зачем-то вычисляете половину длины и еще очень много зачем-то.
Если вы хотите посчитать сумму из строки "1+2+3", то проще всего это сделать через eval("1+2+3")
Но использовать eval() считается не самым хорошим тоном. А если вы хотите чему-то научиться, то попробуйте эту сумму посчитать с помощью методов split(), map(), sum(). Все гуглится, все находится.
UPD: Увидел ваш отдельный вопрос по этой теме, в ответах указали все то же самое
Что вам мешает проверять текст сообщения на соответствие ключевым словам? Зачем команды?
ИМХО лучший вариант - это инлайн кнопки. Тогда и писать ничего не надо, нажал и все.
arhipT999, Одна функция вызывает вторую, та вызывает третью, та четвертую и т.д., в десятой происходит ошибка и вам вываливается информация сверху вниз начиная с самой первой функции.
В вашем случае ошибка произошла в модуде random. вы к нему не имеете отношения никакого. Смотрим выше - tbot.py 33 строка. p = random.choice(n)
Скорее всего n - пустой список. Поэтому такая ошибка и вылетает.
Александр Рыжих, я в основной ветке комментариев задал вопрос, жду ответа.
использование global не есть хорошо. Лучше прокидывать словарь с данными через все функции запроса.
Может случиться ситуация, когда одновременно 2 человека будут заполнять данные и из-за этих global данные от одного попадут к данным другого. Все поперезатрется.
if message.text == "Привет":
bot.send_message(message.from_user.id, "Начнем")
return vvod_rub(message)
используется объект message у которого text='Привет'
И вы как-то не особо разобрались с register_next_step handler. У вас лишние декораторы прописаны, которые не работают, их можно просто удалить.
Вы что хотите сделать? Поправьте, если в чем-то ошибаюсь:
- Поприветствовать пользователя и начать спрашивать у него его данные
- Спросить сколько было получено бриллиантов, дождаться введенного количества, проверить на то, что это число, записать.
- То же самое проделать с рубинами и жителями
- Пройтись по жителям и по каждому записать свои данные